2017-01-13 1 views
2

Я создаю свой список следующим образом и перейдя к методу withInitialListeners, а затем я не вижу ошибок компиляции, и он отлично работает.Как инициализировать сбор в одной строке?

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

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

Теперь я уже думал приходить 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

Is 'withInitialListeners()' yours? Или сторонняя библиотека. – Mordechai

+1

Разве вы не должны делать что-то вроде 'new ArrayList (Arrays.asList (новый CassListener()))? – user2004685

+0

@ user2004685 да это правильно .. извините, сделайте, чем ответ, и я его приму. –

ответ

1

В идеале вы должны изменить подпись withInitialListeners на 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(); 

 Смежные вопросы

  • Нет связанных вопросов^_^