我正在创建这样的列表并传递给方法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 :(得分:1)
理想情况下,您应该将withInitialListeners的签名更改为withInitialListeners(Collection<? extends Host.StateListener>)
。
如果这不是一个选项,您可以通过在方法调用之前在<
... >
中放置显式类型来强制方法的泛型类型:
Arrays.<Host.StateListener>asList(new CassListener())
正如您所看到的,写作非常奇怪,可能会让未来的开发人员不得不维护它。第一种选择是首选。但有时候,明确的通用打字是不可避免的。
答案 1 :(得分:-1)
Builder clusterBuilder = Cluster.builder();
Cluster cluster =
clusterBuilder
.withInitialListeners(Arrays.asList(new CassListener())).build();