我使用 Pair 类来存储有关体育场的信息,即体育场的名称及其容量。
让我们看一下第一个例子。我创建一个列表并用参数化类型 Pair
第一个示例(按预期工作)
List<Pair<String, Integer>> stadiums = new ArrayList<>();
1. stadiums.add( new Pair("Bridgeforth Stadium", 25000));
2. stadiums.add( new Pair("Michigan Stadium", 109901));
3. Pair<String, String> stringPair = new Pair("Lane Stadium", "some str value");
4. stadiums.add(stringPair); // **Required type:Pair<String,Integer> Provided:Pair<String,String>**
第二个例子(有问题)
List<Pair<String, Integer>> stadiums = new ArrayList<>();
1. stadiums.add( new Pair("Bridgeforth Stadium", 25000));
2. stadiums.add( new Pair("Michigan Stadium", 109901));
5. stadiums.add( new Pair("Lane Stadium", "some str value"));
在我看来,我需要创建一个参数化类型的变量(正如我上面指出的)才能使编译器正常工作。但我想了解为什么会这样。
当您编译代码(任何版本)时,您将收到未经检查的类型警告,告诉您正在做一些危险的事情,可能会导致类型错误。你猜怎么了?事情正在发生。
代码的正确版本始终是这样写的
stadiums.add(new Pair<>("Lane Stadium", "some str value"));
与
<>
。如果没有 <>
,您就是在告诉编译器不要担心 Pair
到底是什么类型,并且它会忠实地执行您的指令,不用担心。
如果您有一个泛型类型,即使用
<...>
定义的类型(如 class Pair<A, B>
),那么基本上每次您引用 Pair
时,它都应该是 Pair<something, something>
。 (少数例外包括 Pair.class
和 import foo.bar.Pair;
。)