什么类型的T?

时间:2015-09-22 11:28:31

标签: java generics types

我想要概括两个课程:

public class General<T> {
   T content;
   setContent(T content) { ... };       
}
public class Specific {
   Foo text;
   setText(Foo text) { ... };
}

T可以是三种不同的类型,所有类都是类。 Foo就是其中之一,Pair是另一个。 我想引入一个抽象超类来概括对属性的访问:

public abstract class Superclass {
    abstract void setText(Foo text);
}

两个类(GeneralSpecific)都扩展了这个超类。但是现在我在实现类General的setter时遇到了问题:

public void setText(Foo text) {
    if (T is of type Foo) content = (T) text;
    if (T is of type Pair) ((Pair)content).setHead(text);
    ...
}

我需要写什么而不是is of type?在Java中是否有任何这样的表达式在编译时得到评估?

我可以检查content的类型,但我想如果它为null则不起作用。另外,我可以用T之类的内容替换? extends Object,但是如何创建(以前)T的实例呢?

我用谷歌搜索,但我找不到足够的答案来解决这个问题。

2 个答案:

答案 0 :(得分:0)

您可以为这些类创建2种不同的方法:

public abstract class Superclass {
    abstract void setText(Foo text);
    abstract void setText(Pair text);
}

答案 1 :(得分:0)

不是让抽象类使用接口的概念(使用父引用),那么你可以动态决定....