我想要概括两个课程:
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);
}
两个类(General
和Specific
)都扩展了这个超类。但是现在我在实现类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
的实例呢?
我用谷歌搜索,但我找不到足够的答案来解决这个问题。
答案 0 :(得分:0)
您可以为这些类创建2种不同的方法:
public abstract class Superclass {
abstract void setText(Foo text);
abstract void setText(Pair text);
}
答案 1 :(得分:0)
不是让抽象类使用接口的概念(使用父引用),那么你可以动态决定....