1

是否可以将通用对象转换为字符串之类的东西?

我认为铸造泛型将类似于普通的对象铸造,如:

public String tempString;
public E genericObject;

tempString = ((String) genericObject);

但是,在编译时我仍然得到一个不兼容的类型错误。

required: String 
found:    E
4

2 回答 2

5

你可以做你想做的事,但你需要先通过另一个演员:

public String tempString;
public E genericObject;

tempString = (String) ((Object) genericObject);

问题是你不能在层次结构中“横向”投射,你只能向下投射。也就是说,您可以转换 from Objectto String,但不能转换 from Numberto String

请注意,如果E确实不是字符串,您将获得ClassCastException,但是如果您仅在知道E确实是字符串的情况下这样做,那么您会没事的。

于 2013-10-13T20:37:41.080 回答
-1

你可以。但是,仅当 E 和 String 兼容时。

在运行时,JIT 用您在类创建期间选择的实际类型“替换”类型 E。例如,如果您使用 Integer 作为 E 创建了泛型类,您的代码将变为:

public String tempString;
public Integer genericObject;

tempString = ((String) genericObject);

这就是为什么它不起作用。

如果要确保泛型可转换为特定类,则可以限制表单中可能的泛型类型generic<E extends String>(但是 Java 中没有扩展 String 的类)。

于 2013-10-13T20:39:18.713 回答