Ho una classe generica Foo<T>
e tipi parametrizzati Foo<String>
e Foo<Integer>
. Ora voglio mettere diversi tipi di parametri in un singolo ArrayList
. Qual è il modo corretto di farlo?Contenitore di tipi generici in java
Candidate 1:
public class MMM {
public static void main(String[] args) {
Foo<String> fooString = new Foo<String>();
Foo<Integer> fooInteger = new Foo<Integer>();
ArrayList<Foo<?> > list = new ArrayList<Foo<?> >();
list.add(fooString);
list.add(fooInteger);
for (Foo<?> foo : list) {
// Do something on foo.
}
}
}
class Foo<T> {}
Candidate 2:
public class MMM {
public static void main(String[] args) {
Foo<String> fooString = new Foo<String>();
Foo<Integer> fooInteger = new Foo<Integer>();
ArrayList<Foo> list = new ArrayList<Foo>();
list.add(fooString);
list.add(fooInteger);
for (Foo foo : list) {
// Do something on foo.
}
}
}
class Foo<T> {}
In una parola, è legato alla differenza tra Foo<?>
e il tipo grezzo Foo
.
Aggiornamento:
Grep Qual è la differenza tra il jolly tipo parametrico illimitata e il tipo crudo? su this link potrebbe essere utile.