1
還有就是Bukkit API中的方法:getOnlinePlayers()
:返回一個Collection的方法在被反射調用時返回一個數組?
public static Collection<? extends Player> getOnlinePlayers()
{
return server.getOnlinePlayers();
}
在舊版本的Bukkit它返回的Player[]
陣列;而在較新的版本中則返回Collection<Player>
。
我想讓它有兩個新版本和舊版本的兼容性可能,所以我使用反射來調用它:
public static Collection<Player> getOnlinePlayers(){
Method m;
Object obj = null;
try
{
m = Bukkit.class.getMethod("getOnlinePlayers");
obj = m.invoke(null, (Object[])null);
}catch (...){ // omitted
throw new RuntimeException(...); // omitted
}
if (obj instanceof Player[]){
System.out.println("array"); // Used for testing
return Arrays.asList((Player[])obj);
}else if (obj instanceof Collection){
System.out.println("collection"); // Used for testing
return (Collection<Player>)obj;
}else{
throw new RuntimeException(...); // omitted
}
}
那麼這裏的問題:當我在都新嘗試這個代碼和舊版本的Bukkit,它總是打印「數組」。我想知道爲什麼會發生這種情況?
很明顯,你只是用返回數組的版本來試試它。 – 2015-02-09 10:39:57
@你能檢查'm.toString()'返回什麼嗎? – 2015-02-09 10:44:11
@defaultlocale好點;-)刪除了。 – laune 2015-02-09 10:45:10