是否可以将通用对象转换为类似字符串的东西?
我认为转换泛型类似于普通的对象转换,如:
public String tempString;
public E genericObject;
tempString = ((String) genericObject);
但是,在编译时我仍然会遇到不兼容的类型错误。
required: String
found: E
答案 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的类)。