Hy All, in this post, going to tell you real-time scenario when you use super and extends
? super C
This indicates the lower bound, what exactly means that it can hold a list of object which is super to type C or C
? extends A
This indicates the upper bound, what exactly means that it can hold a list of object which is a child to type A or A.
Below is provided an example for the same,
? super C
This indicates the lower bound, what exactly means that it can hold a list of object which is super to type C or C
? extends A
This indicates the upper bound, what exactly means that it can hold a list of object which is a child to type A or A.
Below is provided an example for the same,
package com.vinay.stock.poc; import java.util.ArrayList; import java.util.List; /** * @author 912vi */public class GenericDemo { public static void main(String[] args) { List<A> list = new ArrayList<>(); list.add(new A()); list.add(new B()); list.add(new C()); test2(list); List<B> list1 = new ArrayList<>(); list1.add(new B()); list1.add(new C()); test2(list1); /* List<AA> list2 = new ArrayList<>(); test2(list2);// compile time error because upper bound is A type */ List<C> list3 = new ArrayList<>(); list3.add(new C()); test3(list3); List<B> list4 = new ArrayList<>(); list4.add(new B()); test3(list4); /* List<D> list5 = new ArrayList<>(); list5.add(new D()); test3(list5); // compile time error , due to lower bound is C type */ } public static void test2(List<? extends A> list) { System.out.println(list); } public static void test3(List<? super C> list) { System.out.println(list); } } class AA { } class A extends AA { } class B extends A { } class C extends B { } class D extends C { }
Comments
Post a Comment