gpt4 book ai didi

java - 调用泛型类型

转载 作者:行者123 更新时间:2023-12-02 06:46:45 26 4
gpt4 key购买 nike

我目前正在关注以下页面上的 Java 泛型示例: http://docs.oracle.com/javase/tutorial/java/generics/types.html

public interface Pair<K, V> {
public K getKey();
public V getValue();
}

public class OrderedPair<K, V> implements Pair<K, V> {

private K key;
private V value;

public OrderedPair(K key, V value) {
this.key = key;
this.value = value;
}

public K getKey() { return key; }
public V getValue() { return value; }
}


Pair<String, Integer> p1 = new OrderedPair<String, Integer>("Even", 8);
OrderedPair<String, Integer> p1 = new OrderedPair<>("Even", 8);

我的问题是关于最后创建变量的行。一开始,一个从pair接口(interface)开始,另一个从OrderedPair类开始。使用哪一种有区别吗?我只是想理解为什么代码不同。

最佳答案

该代码无效。 Java 不允许同一作用域内有两个同名的变量。

如果名字是 p1p2 ,它们每个都引用类 OrderedPair<String,Integer> 的不同对象。在第二种情况下,您可以省略 new 中的通用参数。因为它们已经用变量的类型指定了(变量名之前的 OrderedPair<String, Integer>)。在第一种情况下,对象的类型是变量类型的子类。这对于多态性来说是有效的。通用参数被指定了两次,虽然是多余的,但也是有效的。

如上所述,p1p2 OrderedPair<String,Integer> 类型的引用对象。然而,p1p2有不同的静态(声明的)类型。在这种情况下,这意味着:

  1. 如果输入 OrderedPair有一个方法reverseOrder (只是说一下)不是继承自Pair ,然后p1.reverseOrder()无效(即使引用的对象是正确的类型,但编译器不知道这一点),但 p2.reverseOrder()将会。在这里,p2 “优于”p1 (因为您需要更多的特异性,而 p2 有它)。
  2. 如果您定义了第三种类型 UnorderedPait implements Pair ,这种类型的新实例可以分配给 p1 ,但不是p2 。在这里,p1 “优于”p2 (因为您需要更多的通用性,而 p1 拥有它)。

关于java - 调用泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18553926/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com