是否可以将通用对象转换为字符串之类的东西?
我认为铸造泛型将类似于普通的对象铸造,如:
public String tempString;
public E genericObject;
tempString = ((String) genericObject);
但是,在编译时我仍然得到一个不兼容的类型错误。
required: String
found: E
你可以做你想做的事,但你需要先通过另一个演员:
public String tempString;
public E genericObject;
tempString = (String) ((Object) genericObject);
问题是你不能在层次结构中“横向”投射,你只能向下投射。也就是说,您可以转换 from Object
to String
,但不能转换 from Number
to String
。
请注意,如果E
确实不是字符串,您将获得ClassCastException,但是如果您仅在知道这E
确实是字符串的情况下这样做,那么您会没事的。
你可以。但是,仅当 E 和 String 兼容时。
在运行时,JIT 用您在类创建期间选择的实际类型“替换”类型 E。例如,如果您使用 Integer 作为 E 创建了泛型类,您的代码将变为:
public String tempString;
public Integer genericObject;
tempString = ((String) genericObject);
这就是为什么它不起作用。
如果要确保泛型可转换为特定类,则可以限制表单中可能的泛型类型generic<E extends String>
(但是 Java 中没有扩展 String 的类)。