2014-02-24 66 views
0

如果你嘗試下面的一段代碼(我已經試過了在Java 6):奇怪的行爲:isAssignableFrom(類<?>)

System.out.println(Collection.class.isAssignableFrom(Set.class)); 

它打印出:false但我期待打印出:true因爲javadoc中是說:

Determines if the class or interface represented by this Class object is either the same as, or is a superclass or superinterface of, the class or interface represented by the specified Class parameter.

但收藏是集超類:public interface Set<E> extends Collection<E>

那麼這種奇怪行爲的解釋是什麼?

+3

您正在導入錯誤的「集合」類型。它應該是'java.util.Collection'。或者也許Java 6搞砸了。它適用於7.或者下面的@ Marco13說。 –

+3

或者錯誤的設置類型。它應該是'java.util.Set' :-) – Marco13

+0

你是對的,進口今天是我的一天:) ... – Daniel

回答

3

問題是,您要麼輸入了錯誤的Collection.class,要麼輸入了錯誤的Set.class

請注意,有一些常見的陷阱使用上CollectionisAssignableFrom方法時:我經常注意到,人們混淆了參數,所以人們稱Set.class.isAssignableFrom(Collection.class)而不是調用Collection.class.isAssignableFrom(Set.class)的。

另一個經常咆哮起來醜陋頭的問題與Map.class有關,其中不是 a Collection

希望這會有所幫助。

+1

我很欣賞你花時間添加了常見的陷阱部分,我必須承認起初這是我的一個陷阱(當我第一次開始使用反射時)。 – Daniel

相關問題