铸造通用

时间:2013-10-13 20:30:04

标签: java generics casting

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

我认为转换泛型类似于普通的对象转换,如:

public String tempString;
public E genericObject;

tempString = ((String) genericObject);

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

required: String 
found:    E

2 个答案:

答案 0 :(得分:5)

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

public String tempString;
public E genericObject;

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

问题是你不能在层次结构中投射“横向”,你只能抛弃。也就是说,您可以从Object投射到String,但不能从Number投射到String

请注意,如果E确实不是字符串,那么您将获得ClassCastException,但是如果您只是在知道的情况下执行此操作{ {1}}真的是一个字符串,那你就没事了。

答案 1 :(得分:-1)

你可以。但是,只有当E和String兼容时才会使用。

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

public String tempString;
public Integer genericObject;

tempString = ((String) genericObject);

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

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