2017-01-13 15 views
2

このようなリストを作成し、メソッドwithInitialListenersに渡すと、コンパイルエラーが表示されず、正常に動作します。コレクションを1行に初期化する方法は?

List<Host.StateListener> cassListener = new ArrayList<>(); // line 1 
cassListener.add(new CassListener()); // // line 2 

Builder clusterBuilder = Cluster.builder(); 
Cluster cluster = 
     clusterBuilder 
      .withInitialListeners(cassListener).build(); 

今、私は1行に来てLINE1とLINE2に考えていたとwithInitialListenersメソッドに直接渡すので、私はこのようなものでした:

Builder clusterBuilder = Cluster.builder(); 
cluster = 
    clusterBuilder 
     .withInitialListeners(Arrays.asList(new CassListener())).build(); 

をしかし、このアプローチでそれは私のコンパイルエラーを与えます

The method withInitialListeners(Collection<Host.StateListener>) in the type Cluster.Builder is not applicable for the arguments (List<CassListener>) 

何が問題なのですが、どうすれば修正できますか?私はJava 7で作業しています。

+0

あなたの 'withInitialListeners()'はあなたのものですか?または第三者図書館。 – Mordechai

+1

あなたは 'new ArrayList (Arrays.asList(new CassListener()))'のようなことをしてはいけませんか? – user2004685

+0

@ user2004685はい、そうです。申し訳ありませんが、答えよりも私はそれを受け入れます。 –

答えて

1

withInitialListenerのシグニチャをwithInitialListeners(Collection<? extends Host.StateListener>)に変更するのが理想的です。

ことができない場合は、あなたが>メソッド呼び出しの前に... <に明示的な型を配置することによって、方法の一般的な種類を強制することができますが:

Arrays.<Host.StateListener>asList(new CassListener()) 

あなたが見ることができるように、それは書くためにかなり奇妙ですそれを維持しなければならない将来の開発者を抱かせるかもしれません。最初のオプションが優先されます。しかし、時には明示的な一般的な型付けは避けられません。

+0

ええ、私は署名を変更することはできませんので、そのサードパーティライブラリです。 –

-1
Builder clusterBuilder = Cluster.builder(); 
Cluster cluster = 
    clusterBuilder 
     .withInitialListeners(Arrays.asList(new CassListener())).build(); 
関連する問題