user5447339
user5447339

Reputation:

How to initialize collection in one line?

I am creating my list like this and passing to a method withInitialListeners and then I don't see any compilation error and it works fine.

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

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

Now I was thinking to coming line1 and line2 in a single line and pass it directly to withInitialListeners method so I did something like this:

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

But with this approach it gives me compilation error as shown below:

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

What is wrong and how can I fix it? I am working with Java 7.

Upvotes: 2

Views: 751

Answers (1)

VGR
VGR

Reputation: 44328

Ideally, you should change the signature of withInitialListeners to withInitialListeners(Collection<? extends Host.StateListener>).

If that is not an option, you can force the generic types of a method by placing explicit types in <> before the method call:

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

As you can see, it’s pretty weird to write, and it may befuddle future developers who have to maintain it. The first option is preferred. But sometimes, explicit generic typing is unavoidable.

Upvotes: 1

Related Questions