Java 返回集合的方法在';它是由反射引起的吗?
Bukkit API中有一个方法:Java 返回集合的方法在';它是由反射引起的吗?,java,arrays,reflection,collections,Java,Arrays,Reflection,Collections,Bukkit API中有一个方法:GetOnlinePlayer(): 问题是:当我在Bukkit的新旧版本中尝试这段代码时,它总是打印“array”。我想知道为什么会发生这种情况?我已经找到了原因。原因是我正在测试Spigot,它是一个基于Bukkit的API,但是即使Bukkit改变了它,仍然保持方法getOnlinePlayer()返回数组。当我对Bukkit进行测试时,它会输出“collection”。显然,您只使用返回数组的版本进行了测试。@Cnly您能检查一下m.toString()
GetOnlinePlayer()
:
问题是:当我在Bukkit的新旧版本中尝试这段代码时,它总是打印“array”。我想知道为什么会发生这种情况?我已经找到了原因。原因是我正在测试Spigot,它是一个基于Bukkit的API,但是即使Bukkit改变了它,仍然保持方法getOnlinePlayer()返回数组。当我对Bukkit进行测试时,它会输出“collection”。显然,您只使用返回数组的版本进行了测试。@Cnly您能检查一下
m.toString()
return吗?@defaultlocale Good point;-)我已经找到原因了。原因是我正在测试Spigot,它是一个基于Bukkit的API,但是即使Bukkit改变了它,仍然保持方法getOnlinePlayer()返回数组。当我对Bukkit进行测试时,它会打印出“集合”。谢谢你们,伙计们P
public static Collection<? extends Player> getOnlinePlayers()
{
return server.getOnlinePlayers();
}
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
}
}