![](/img/trans.png)
[英]spying an array element with mockito returns wanted but not invoked when the method is invoked
[英]A method that returns an Collection is returning an array when it's invoked by reflection?
Bukkit API中有一個方法: getOnlinePlayers()
:
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的新舊版本中都嘗試此代碼時,它始終會打印“ array”。 我想知道為什么會這樣?
我發現了原因。 原因是我正在針對Spigot(基於Bukkit的API)進行測試,但即使Bukkit進行了更改,但仍使getOnlinePlayers()方法返回數組。 當我對Bukkit進行測試時,它會打印出“集合”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.