2017-01-13 2 views
2

Ich erstelle meine Liste wie folgt und übergibt eine Methode withInitialListeners und dann sehe ich keinen Kompilierungsfehler und es funktioniert gut.Wie initialisiert man die Sammlung in einer Zeile?

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

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

Jetzt dachte ich line1 und line2 in einer einzigen Zeile zu kommen und direkt an withInitialListeners-Methode übergeben, damit ich so etwas wie dies tat:

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

Aber mit diesem Ansatz Kompilierungsfehler es gibt mir wie unten gezeigt:

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

Was ist falsch und wie kann ich es beheben? Ich arbeite mit Java 7.

+0

Ist 'withInitialListeners()' deins? Oder eine 3rd-Party-Bibliothek. – Mordechai

+1

Sollten Sie nicht etwas wie 'new ArrayList (Arrays.asList (new CassListener()))'? – user2004685

+0

@ user2004685 Ja das ist richtig .. Entschuldigung, machen als Antwort und ich werde es akzeptieren. –

Antwort

1

Idealerweise sollten Sie die Signatur von withInitialListeners zu withInitialListeners(Collection<? extends Host.StateListener>) ändern.

Wenn das nicht möglich ist, können Sie die generischen Typen ein Verfahrens erzwingen, indem explizite Typen in < platzieren ... > vor dem Methodenaufruf:

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

Wie Sie sehen können, ist es ziemlich seltsam zu schreiben und es kann zukünftige Entwickler verwirren, die es pflegen müssen. Die erste Option ist bevorzugt. Aber manchmal ist eine explizite generische Typisierung unvermeidlich.

+0

yeah Ich kann die Signatur nicht ändern, weil es eine Drittanbieter-Bibliothek ist. –

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