2011-10-17 317 views
0

我試着去使用一個變量的類型來定義另一個 我知道我可以只是把所有類型的枚舉然後使用序號用開關/箱選擇類型,但我想知道是否有更簡單的方法。使用變量類型定義另一個變量類型

繼承人一個小例子:

public void loadRotation(TetrominoType type) { 
TetrominoType new = new type.class(); 
} 

TetroiminoType type = new RedTetro(); 
this.loadRotation(type); 

RedTetro明顯延長TetrminoType

我知道這不會工作,但希望從中你明白我想要做的事。

+0

假設一個*對象*被傳遞,請參見['Object.getClass()'](http://download.oracle.com/javase/6/docs/api/java/lang/Object.html#getClass %28%29)方法並遵循那裏的鏈接 - 這將允許反射利用率。其他選項包括傳入「Class <...>」或使用「工廠模式」。 – 2011-10-17 01:11:38

回答

1

反思是答案。

如果你談論的是有一個無參數的構造函數的類,它是相當直截了當:

MyClass c = new MyClass(); 
MyClass c2 = c.getClass().newInstance(); 

如果你需要使用一個構造函數的參數,你必須提取所需的Constructor和使用它。甲骨文在這裏提供了一個教程:

http://download.oracle.com/javase/tutorial/reflect/member/ctorInstance.html

+0

這工作!謝謝! – Diesal11

1

你可以使用instanceof評價:

public class MainClass { 
    public static void main(String[] a) { 

    String s = "Hello"; 
    if (s instanceof java.lang.String) { 
     System.out.println("is a String"); 
    } 
} 
} 
+0

但那裏有7種不同類型,我試圖避免編寫的條件語句爲每個類 – Diesal11

+0

這還沒有真正回答的基本問題:如何將一個類型 - * *構造函數傳遞給方法? – 2011-10-17 01:09:48

0

你需要查看工廠設計模式。