Java 返回集合的方法在';它是由反射引起的吗?

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

Bukkit API中有一个方法:
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
    }
}