检查Java中的通配符通用对象的类型

时间:2013-07-14 21:34:31

标签: java generics generic-programming typechecking

我正在编写一个通用Pair类,它包含任意两个对象(相同或不同类型)。我现在正在写一个复制构造函数,但是,我遇到了一些我无法解决的错误。我的代码如下:

public class Pair<T1, T2> {
    // Instance Fields
    private T1 first;
    private T2 second;

    // Constructors
    public Pair() {}

    public Pair(Pair<?, ?> p) {
        first  = p.first;  // error here
        second = p.second; // error here
    }
}

我可以使用?检查配对对象中instanceof的类型吗?如果我将p.first转换为T1它可行,但我想让我的课程彻底并处理它可能面临的任何情况,例如用户输入错误的对象对类型或其他问题可能会发生。

另一个问题是,在Java中使用泛型是否存在指南或某种规则?

1 个答案:

答案 0 :(得分:4)

尝试? extends T1? extends T2 - 这将确保您的对象属于同一类型或子类型。

public class Pair<T1, T2> {
    // Instance Fields
    private T1 first;
    private T2 second;

    // Constructors
    public Pair() {}

    public Pair(Pair<? extends T1, ? extends T2> p) {
        first  = p.first;
        second = p.second;
    }
}