java泛型中的通配符

java泛型中的通配符,java,Java,我得到了Pair.java类,必须实现PairTools.java类 Pair.java import java.util.Objects; public class Pair<A, B> { public final A a; public final B b; public Pair(A a, B b) { this.a = a; this.b = b; } @Override public

我得到了Pair.java类,必须实现PairTools.java类

Pair.java

import java.util.Objects;

public class Pair<A, B> {

    public final A a;
    public final B b;

    public Pair(A a, B b) {
        this.a = a;
        this.b = b;
    }

    @Override
    public String toString() {
        // appending things to the empty string prevents us from having to worry about null
        // and calling toString explicitly, Objects.toString(a) + " " + Objects.toString(b)
        // would also work
        return "" + a + " " + b;
    }

    @Override
    public boolean equals(Object obj) {
        // `obj instanceof Pair` will automatically return false if obj is null
        if (!(obj instanceof Pair)) {
            return false;
        }

        // some warnings with generics are unavoidable
        @SuppressWarnings("unchecked")
        Pair<A, B> p = (Pair<A, B>) obj;

        // we use Objects.equals() to handle nulls easily
        return Objects.equals(a, p.a) && Objects.equals(b, p.b);
    }

    @Override
    public int hashCode() {
        // we use Objects.hashCode() to handle nulls easily, 
        // the operation ^ is XOR, not exponentiation
        return Objects.hashCode(a) ^ Objects.hashCode(b);
    }
}
导入java.util.Objects;
公共类对{
公开决赛A;
公开决赛B;
公共对(A、B){
这个a=a;
这个.b=b;
}
@凌驾
公共字符串toString(){
//在空字符串中添加内容可以防止我们担心null
//并显式调用toString,Objects.toString(a)+“”+Objects.toString(b)
//也会起作用
返回“+a+”+b;
}
@凌驾
公共布尔等于(对象obj){
//如果obj为null,“obj instanceof Pair”将自动返回false
如果(!(obj实例对)){
返回false;
}
//一些关于泛型的警告是不可避免的
@抑制警告(“未选中”)
对p=(对)obj;
//我们使用Objects.equals()轻松处理空值
返回Objects.equals(a,p.a)&Objects.equals(b,p.b);
}
@凌驾
公共int hashCode(){
//我们使用Objects.hashCode()轻松处理空值,
//运算^是异或运算,不是求幂运算
返回Objects.hashCode(a)^Objects.hashCode(b);
}
}
在PairTools.java中,我必须实现以下方法:

public class PairTools {

    /**
     * this is how you can use wildcards in generics
     * 
     * @param pair (assume never null)
     * @return a pair containing two references to a of the given pair
     */
    public static <A> Pair<A, A> copyA(Pair<A, ?> pair) {
        return null;
    }

}
公共类配对工具{
/**
*这就是在泛型中使用通配符的方法
* 
*@param对(假定从不为空)
*@返回一个包含对给定对的两个引用的对
*/
公共静态对copyA(对){
返回null;
}
}

我不理解它的实现。我需要一个解释。

一个可能的实现可能是这样的

public class PairTools {

    /**
     * this is how you can use wildcards in generics
     * 
     * @param pair (assume never null)
     * @return a pair containing two references to a of the given pair
     */
    public static <A> Pair<A, A> copyA(Pair<A, ?> pair) {
        return new Pair<A, A>(pair.a, pair.a);
    }

}

因为您必须返回一对
。您将获得一个
作为参数,因此您只能确保给定对的第一个值的类型为
a
。您不知道
对的类型。b

您需要更具体一些。具体来说,您不明白什么?导入java.util.Objects;我可以知道你使用哪个jdk吗?什么是
java.util.Objects
?Oli Charlesworth我不知道如何操作给定的一对来获得A的两个引用。对java 7来说是新的。
return new Pair<A, A>(pair.a, pair.b);