2016-07-21 3 views
0

Upd: Ich sehe, dass meine Frage ist doppelt und mein Problem ist: Dies ist nicht sicher, Generika in Arrays zu verwenden. Aber wie muss ich meinen Code ändern, um das zu beheben? Ich kam alles hoch ist (und ich nicht noch nicht, ob dieser Code zu alt ähnlich ist)Rohtypen Warnung (aktualisiert)

_readWriteThreads = (ReadWriteThread<T, RP, SP>[]) Array.newInstance(ReadWriteThread.class, sc.getSelectorThreadCount()); 

Aber dieser Code gab mir auch eine Warnung aus.


Der vorherige Eintrag (Raw types warning):

Ich bin kein Java-Entwickler, aber ich möchte die einzige Warnung in meinem Projekt in diesem Teil des Code beheben:

public abstract class SelectorThread<T extends MMOConnection<T, RP, SP>, RP extends ReceivablePacket<T, RP, SP>, SP extends SendablePacket<T, RP, SP>> 
{ 
    protected static final Log _log = new MMOLogger(SelectorThread.class, 1000); 

    private final AcceptorThread<T, RP, SP> _acceptorThread; 
    private final ReadWriteThread<T, RP, SP>[] _readWriteThreads; 


    protected SelectorThread(SelectorConfig sc, IPacketHandler<T, RP, SP> packetHandler) throws IOException 
    { 
     _acceptorThread = new AcceptorThread<T, RP, SP>("AcceptorThread", this, sc); 
     _readWriteThreads = new ReadWriteThread[sc.getSelectorThreadCount()]; 

     for (int i = 0; i < _readWriteThreads.length; i++) 
      _readWriteThreads[i] = new ReadWriteThread<T, RP, SP>("ReadWriteThread-" + (i + 1), this, sc, packetHandler); 
    } 

    ... 
} 

Der Warnung:

Bitte, kann mir jemand helfen, dies zu beheben, oder mir sagen, was ich wissen muss, um dies zu beheben. Ich verstehe, dass obige Zeile von <T, RP, SP> behoben wird, aber das funktioniert nicht mit Array.

+0

Verwenden Sie eine 'ArrayList >', anstatt zu versuchen, ein ar zu verwenden Strahl. –

Antwort

0

Arrays und Generika spielen nicht gut zusammen. Du kannst sie so arbeiten lassen, aber es ist eine Menge Aufwand.

Eine viel bessere Lösung ist es, eine List zu verwenden, wahrscheinlich ein ArrayList, für die Generika "einfach funktionieren":

private final List<ReadWriteThread<T, RP, SP>> _readWriteThreads; 

es

_readWriteThreads = new ArrayList<>(); 
mit initialisieren

dann

_readWriteThreads.add(
    new ReadWriteThread<T, RP, SP>("ReadWriteThread-" + (i + 1), this, sc, packetHandler)); 
+0

Vielen Dank! – user6618770

+0

Sorry, aber Ihr Code scheint unvollständig zu sein: Wie sollte ich _readWriteThreads im Konstruktor vor dem Hinzufügen von Elementen initialisieren? – user6618770

+0

Wenn ich dies versuche: '_readWriteThreads = neue Liste >();' Ich habe Fehler 'Kann den Typ Liste nicht instanziieren >' – user6618770

Verwandte Themen