Java generics ? super Type and ? extends Type

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,

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());

        List<B> list1 = new ArrayList<>();
        list1.add(new B());
        list1.add(new C());

     /*   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());

        List<B> list4 = new ArrayList<>();
        list4.add(new B());

      /*  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) {

    public static void test3(List<? super C> list) {

class AA {


class A extends AA {


class B extends A {


class C extends B {


class D extends C {



Popular posts from this blog

Stay Updated As Software Engineer

12 Must-Know LeetCode+ Links for Coding Excellence

Getting Master in Hibernate and JPA