使用 wildChar 与不使用 wildChar 的通用变量声明

Bhu*_*van 6 java generics

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());
    }
}
Run Code Online (Sandbox Code Playgroud)

ShapeContainer<Shape> A将变量声明为vs的优点和缺点是什么 ShapeContainer<? extends Shape> B

每一项应优先考虑什么条件?