2013-06-26 96 views
1

我有這樣的代碼,我想知道,如果這被認爲是不好的做法:是鑄造件壞事 - Java泛型

Class<T> type = null; 
if (type.isInstance(TypeA.class)) { 
    for (Object obj : typeAList) { 
     TypeA mytype = (TypeA) obj; 
     System.out.println(mytype.getMyId()); 
    } 
}  

typeAList實際上是一個參數List<T> typeAList

任何壞痕跡嗎?這能做得更好嗎?

+3

這個問題有什麼問題? –

+1

它產生NPE是錯誤的? – darijan

+0

NPE是什麼意思? –

回答

4

如果typeAListList<T>那麼你爲什麼不重複這樣的:

for(T obj : typeAList) { 
    System.out.println(obj.getMyId()); 
} 

的情況下T被定義爲延長一些已知的類/接口定義了getMyId()方法。否則:

for(T obj : typeAList) { 
    if (obj instanceof TypeA) { 
     System.out.println(((TypeA)obj).getMyId()); 
    } 
} 
+0

是的,第二個適用於我的情況。我的問題是,它被認爲是一種糟糕的編程/練習? –

+2

下面,java創建一個對象集合,並使用反射來計算出它在運行時的類型...... OVERUSE的instanceof或isInstance通常是不好的做法。這意味着你可能在某處丟失了一個通用接口。 如果您將要收集具有類似方法但功能不同的對象集合,那麼我將使用上面提出的第一個選項。這是泛型的真正用法。 在第二個選項中,您要求JVM在每次迭代中計算出類的類型。這會減慢速度。 – Slihp