寻找使用反射创建构造函数的Iterable类

时间:2017-03-27 18:19:07

标签: java reflection bukkit iterable nms

美好的一天,

我有一个关于Java反思的问题。 我想使用以下构造函数为类PacketPlayOutPlayerInfo实现构造函数:

public PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction paramEnumPlayerInfoAction, Iterable<EntityPlayer> paramIterable){
    [...]
}

要构建构造函数,我使用此方法

Constructor<?> packetPlayerInfoConstructor = ReflectionHandler.getNMSClass("PacketPlayOutPlayerInfo").getConstructor(
                                ReflectionHandler.getNMSClass("PacketPlayOutPlayerInfo$EnumPlayerInfoAction"), _____);

第一个参数工作得非常好,但是我不得不得到Iterable接口的类来使构造函数工作......(或者我呢?)

提前致谢并度过愉快的一天,

rapt0r

1 个答案:

答案 0 :(得分:0)

通常使用Java反射,检索方法(或构造函数)的类型参数是类型擦除后的参数,即在您的示例中,类型参数是PacketPlayOutPlayerInfo.EnumPlayerInfoAction和类型擦除后的Iterable,因此您的注释答案为#34 ;(或我)&#34;应该是,你应该只需要通用类型。

您不能在类中创建两个仅由参数化类型参数不同的方法,因此上述方法不会使任何有效的Java方法无法访问。例如,尝试声明以下两种方法在Java类中是不合法的:

public int sameName(List<String> stringList) {
  return 1;
}

public int sameName(List<Integer> intList) {
  return 1;
}