2013-10-04 125 views
1
實例

我有以下代碼(使用的Minecraft的bukkit EnittyType枚舉來自:http://jd.bukkit.org/rb/doxygen/d6/d7b/EntityType_8java_source.html):java Class <?擴展實體>如何讓實體

for (EntityType e : EntityType.values()) 
    { 
     System.out.println("Loading entity: " + e); 

     Class<? extends Entity> c = e.getEntityClass(); 
     Entity en = c; // <-- This does not work and throws an error 
     if (en instanceof Monster) 
     { 
      System.out.println("Monster --> " + e.getEntityClass()); 

     } 

    } 

我想要得到的EntityClass<? extends Entity>這樣我可以檢查這個特定的類是Monster類的一個實例。

我試着做c.newInstance(),卻得到了許多例外,如:

java.lang.InstantiationException: org.bukkit.entity.Egg 
at java.lang.Class.newInstance(Unknown Source) 
+0

你想在這裏完成什麼?你是說你想要確定'e'的運行時類型嗎?爲什麼不使用'instanceof'? – chrylis

+0

我嘗試使用instanceof,例如: 'if(c instanceof Monster)'',但得到了錯誤: '不兼容的條件操作數類型Class 和怪物' – Jameshobbs

回答

5

that way I can check if this particular class is an instanceof a Monster class.
...
I am trying to use instanceof such as: if (c instanceof Monster)

cClass<? extends Entity>,這是不一樣的事,作爲一個Entity的實例。

您根本不需要構建一個Entity實例。使用Class#isAssignableFrom()

if (Monster.class.isAssignableFrom(c) { 
    System.out.println("Monster --> " + e.getEntityClass()); 
} 
+1

這很好。謝謝,這絕對是答案。對代碼的一個快速調整是我需要檢查是否c!= null,對於EntityType最後一個類型(UNKNOWN)具有類null。除此之外,這是完美的。非常感謝! – Jameshobbs

+0

在我的OP中查看關於instanceof的以上評論。我得到的錯誤是:'不兼容的條件操作數類和怪物' – Jameshobbs

+0

@chrylis'instanceof'的問題是OP有一個'Class'的實例,並且沒有'Entity'的實例。因此'c instanceof <任何不是超類的類>'總是'false'。 –