interface Shape { }
class Circle implements Shape { }
class ShapeContainer<T extends Shape> {
    T sh;
    public ShapeContainer(T newInstance) {
        sh = newInstance;
    }
    ...
}
class Main {
    public static void main(String[] a) {
        ShapeContainer<Shape> A = new ShapeContainer(new Circle());
        ShapeContainer<? extends Shape> B = new ShapeContainer(new Circle());
    }
}
What are the pros and cons of declaring the variable as  ShapeContainer<Shape> A vs ShapeContainer<? extends Shape> B
What condition should each one be preferred?
