2017-03-27 1 views
0

Guten Tag,Suche nach der Klasse eines Iterable, um einen Konstruktor mit Reflexion

Ich habe eine Frage bezüglich der Reflexion in Java. Ich möchte einen Konstruktor für eine Klasse instanziieren PacketPlayOutPlayerInfo den folgenden Konstruktor:

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

den Konstruktor zu bauen ich diese Methode verwenden

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

Das erste Argument arbeitet völlig in Ordnung, aber ich habe irgendwie die Klasse der Schnittstelle Iterable bekommt den Konstruktor zur Arbeit zu kommen ... (oder mich tun?)

Vielen Dank im Voraus und hat einen schönen Tag,

Rapt0r

+0

Was ist ein 'ReflectionHandler'? Was ist der Rückgabetyp seiner 'getNMSClass()' Methode? –

Antwort

0

Allgemeinen mit Java Reflexion ein Verfahren die Typargumente für das Abrufen (oder Konstruktor) sind die Argumente, die nach Typ Löschung dh in Ihrem Beispiel sind die Typargumente PacketPlayOutPlayerInfo.EnumPlayerInfoAction und Iterable nach Typ Löschung, so die Antwort auf Ihre Kommentar "(oder tue ich)" sollte Nein sein, Sie sollten nur den generischen Typ benötigen.

Sie können nicht zwei Methoden in einer Klasse erstellen, die sich nur durch ihr parametrisiertes type Argument unterscheiden, daher macht das obige keine gültigen Java Methoden unzugänglich. Zum Beispiel ist der Versuch, die folgenden zwei Methoden zu deklarieren, in einer Java-Klasse NICHT zulässig:

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

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