当左右声明为
SlightExpression> left;
SlightExpression> right;
您可以为它们分配具有不同参数类型的SlightExpressions.例如 :
left = new SlightExpression();
right = new SlightExpression();
现在,您无法传递SlightExpression< String>到SlightExpression< Integer>的eq方法实例.
另一方面,在第二个片段中,两个实例都是SlightExpression< String>的子类,因此将一个实例作为参数传递给另一个实例的eq方法没有问题.
为了更好地理解这个概念,您可以将它应用于更好的已知类.例如 :
List> l1 = new ArrayList ();
List> l2 = new ArrayList ();
l1.addAll (l2); // this doesn't pass compilation, since you can't add Integer elements to
// a List
List> l1 = new ArrayList ();
List> l2 = new ArrayList ();
l1.addAll (l2); // this doesn't pass compilation too, since the compiler doesn't know that
// l1 and l2 will refer to Lists of the same element type when addAll is
// invoked
另一方面,此代码段将通过编译,因为编译器发现两个列表具有相同的元素类型:
List l1 = new ArrayList ();
List l2 = new ArrayList ();
l1.addAll (l2);