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
)都扩展了这个超类。但是现在我在实现类的setterGeneral
时遇到了一个问题:
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和我可能在那里使用的所有其他类型实现。当然是“正确”的解决方案,但就我而言,我更喜欢一种侵入性较小的解决方案。