-2

I have a several classes that define as follow :

class A extends Super implements Interface {}
class B extends Super implements Interface {}

I want to create list of these classes. I try the following:

public class C {

    List<Class<?>> classes = Arrays.asList((Class<?>) A.class, B.class); // Works
    List<Class<? extends Super,Interface>> classes2 = Arrays.asList(A.class, B.class); // Compile Error
    List<Class<? extends Super>> classes3 = Arrays.asList(A.class, B.class); // Compile Error

}

What is the right way to write it ? Why the first option works when I make casting only to A ?

azurefrog
  • 10,785
  • 7
  • 42
  • 56

1 Answers1

3

line 1 :

it seems to be the way it works, but you can do this :

List<Class<?>> classes = new ArrayList<Class<?>>(Arrays.asList(A.class, B.class));

line 2 :

java: wrong number of type arguments; required 1

it should be List<Class<? extends Super>>

line 3 is ok on my IDE

line 4 (me) :

List<Class<? extends Super>> classes4 = new ArrayList<Class<? extends Super>>(Arrays.asList(A.class, B.class));

-

Arrays.asList() only return AbstractList and it fails when you use it (UnsupportedOperationException), so you must instanciate a implementation.

Thanks

resehuvija
  • 201
  • 2
  • 7