2016-07-21 4 views
0

更新:私の質問は重複していると私の問題があります:これは配列でジェネリックを使用することは安全ではありません。しかし、これを修正するために私のコードをどのように変更する必要がありますか?私が思いついたすべてが(このコードは古いと類似している場合は私も知りません)生の種類の警告(更新)

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

である。しかし、このコードは、私に警告を与えました。


前の投稿(Raw types warning):

私は、Java開発者ではないんだけど、私は、コードのこの部分で私のプロジェクトで唯一の警告を修正したい:

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); 
    } 

    ... 
} 

警告:

Type safety: The expression of type ReadWriteThread[] needs unchecked 
conversion to conform to ReadWriteThread<T,RP,SP>[] 

私がこれを解決するのを手伝ってもらえるか、これを解決するために何を知っておくべきか教えてください。上記の行は<T, RP, SP>で修正されていますが、これは配列では機能しません。

+0

使用してそれを初期化arを使うのではなく、 'ArrayList >'を使ってくださいレイ。 –

答えて

0

配列とジェネリックがうまく一緒に再生されません。ちょうどそれを仕事にすることはできますが、それはたくさんの努力です。

Aはるかに優れたソリューションは、ジェネリック医薬品は、 "ただ働き" そのため、おそらくListArrayListを、使用することです:

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

が、その後

_readWriteThreads = new ArrayList<>(); 

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

ありがとうございます! – user6618770

+0

申し訳ありませんが、コードが不完全であるようです:要素を追加する前にコンストラクタで_readWriteThreadsをどのように初期化する必要がありますか? – user6618770

+0

私はこれを試してみると、 '_readWriteThreads = new List >();'エラーが出ました 'タイプリストをインスタンス化できません> – user6618770

関連する問題