Java T是什么类型的?

Java T是什么类型的?,java,generics,types,Java,Generics,Types,我想概括两个类: public class General<T> { T content; setContent(T content) { ... }; } public class Specific { Foo text; setText(Foo text) { ... }; } 这两个类(General和Specific)都扩展了这个超类。但是现在我在实现类的setterGeneral时遇到了一个问题: public void setTex

我想概括两个类:

public class General<T> {
   T content;
   setContent(T content) { ... };       
}
public class Specific {
   Foo text;
   setText(Foo text) { ... };
}
这两个类(
General
Specific
)都扩展了这个超类。但是现在我在实现类的setter
General
时遇到了一个问题:

public void setText(Foo text) {
    if (T is of type Foo) content = (T) text;
    if (T is of type Pair) ((Pair)content).setHead(text);
    ...
}
我必须写什么来代替类型为的
?Java中是否有这样的表达式在编译时进行计算

我可以检查
内容的类型,但如果为空,我想这将不起作用。此外,我还可以用类似于
?扩展对象
,但如何创建(以前)T的实例


我在谷歌上搜索过,但找不到这个特定问题的充分答案。

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

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

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

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

与其让抽象类使用接口的概念(带有父引用),不如让抽象类使用接口的概念(带有父引用),然后你可以动态地决定……

与其让抽象类使用接口的概念(带有父引用),不如让抽象类使用接口的概念,然后你可以动态地决定……

在编译时不会计算任何表达式,因为通用代码将被共享。相反,您可以执行类似于
class generalinter extensed General
的操作,并在其中覆盖
setText
。实际上,您无法完成您试图完成的任务,必须找到另一种方法。其他一些评论也提出了这样做的方法。没有表达式会在编译时得到计算,因为通用代码将被共享。相反,您可以执行类似于
class generalinter extensed General
的操作,并在其中覆盖
setText
。实际上,您无法完成您试图完成的任务,必须找到另一种方法。其他一些评论建议了一些方法。当我使用这些类时,我通常不知道我有一个通用的还是特定的对象。如果我只介绍其中一种方法,我需要在我使用它的每个地方都使用带有
instanceof
的ifs。没有选择。当我使用这些类时,我通常不知道我的对象是通用的还是专用的。如果我只介绍其中一种方法,我需要在我使用它的每个地方都使用带有
instanceof
的ifs。没有选择。所以我有一个接口,它由Foo、Pair和我可能在那里使用的所有其他类型实现。当然是“正确”的解决方案,但在我的情况下,我更喜欢一个侵入性较小的解决方案。因此,我有一个接口,它由Foo、Pair和我可能在那里使用的所有其他类型实现。当然是“正确”的解决方案,但就我而言,我更喜欢一种侵入性较小的解决方案。