What is the difference between List <Something> and List <? extends something>?
Is there any difference between these two Lists?
List<Something> a;
List<? extends Something> b;
I know, for example,
List<Object> a;
List<?> b;
List c;
and
List<Something> a;
List<? extends SomeInterfaceSomethingImplements> b;
all different, but what about these? And another, if it Somethingwas replaced by Object?
List<Object> a;
List<? extends Object> b;
List<Something>is a list of type objects Something.
List<? extends Something>- This is a list of objects of a certain type that extends Something.
So, it List<Object>can have objects of any class that extends Object. But it List<? extends Object>can only be initialized or assigned as a list of objects of a certain class that extendsObject
? , , List Objects :
void print(List<Object> list) {
for (Object obj: list) {
System.out.println(obj)
}
}
, List<Integer>. , print List<Object>, List<Integer> List<Object>. , print :
void print2(List<? extends Object> list) {
for (Object obj: list) {
System.out.println(obj)
}
}
List Object print2. print2 List<Integer>, List<String> ..
- print2, print2 Object, . , ? extends ... , List.
, List<Something> - Something, List<? extends Something> , Something.
List<Object> Object.
List<? extends Object> , Object.
, Object ? extends Object:
import java.util.ArrayList;
public class test {
class A {}
public static void main(String[] args) {
// No error
ArrayList<Object> arrObj = new ArrayList<Object>();
// Error
ArrayList<Object> arrObj2 = new ArrayList<A>();
// No Error
ArrayList<? extends Object> arrExt = new ArrayList<Object>();
// No Error
ArrayList<? extends Object> arrExt2 = new ArrayList<A>();
}
}
List<Something> , - ArrayList<Something>. List<? extends Something> , - ArrayList<Something> ArrayList<SomethingChild>, SomethingChild extends Something.
List<? extends Something> list = new ArrayList<SomethingChild>();
List<Something> list = new ArrayList<SomethingChild>();
.
You can learn more about Generics and wildcards used in Generics to gain insight.