簡體   English   中英

當通過反射調用它時,返回Collection的方法將返回一個數組?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM