Java 铸造通用

Java 铸造通用,java,generics,casting,Java,Generics,Casting,是否可以将泛型对象强制转换为字符串之类的对象 我认为转换泛型与普通对象转换类似,比如: public String tempString; public E genericObject; tempString = ((String) genericObject); 然而,在编译时,我仍然得到一个不兼容的类型错误 required: String found: E 你可以做你想做的,但你需要先通过另一个演员: public String tempString; public E ge

是否可以将泛型对象强制转换为字符串之类的对象

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

public String tempString;
public E genericObject;

tempString = ((String) genericObject);
然而,在编译时,我仍然得到一个不兼容的类型错误

required: String 
found:    E

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

public String tempString;
public E genericObject;

tempString = (String) ((Object) genericObject);
问题是,你不能在层次结构中“横向”施放,你只能向下施放。也就是说,您可以从
对象
强制转换为
字符串
,但不能从
数字
强制转换为
字符串


请注意,如果
E
确实不是字符串,您将获得a,但是如果您仅在知道
E
确实是字符串的情况下执行此操作,则您将很好。

您可以执行您想要的操作,但您需要先执行另一个强制转换:

public String tempString;
public E genericObject;

tempString = (String) ((Object) genericObject);
问题是,你不能在层次结构中“横向”施放,你只能向下施放。也就是说,您可以从
对象
强制转换为
字符串
,但不能从
数字
强制转换为
字符串


请注意,如果
E
实际上不是字符串,您将得到一个,但是如果您只在知道
E
实际上是字符串的情况下执行此操作,那么您将很好。

您可以。但是,仅当E和字符串兼容时

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

public String tempString;
public Integer genericObject;

tempString = ((String) genericObject);
这就是它不起作用的原因


如果要确保泛型可强制转换为特定类,可以以
generic
的形式限制可能的泛型类型(但是Java中没有扩展字符串的类)。

可以。但是,仅当E和字符串兼容时

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

public String tempString;
public Integer genericObject;

tempString = ((String) genericObject);
这就是它不起作用的原因


如果要确保泛型可强制转换为特定类,可以以
generic
的形式限制可能的泛型类型(但是Java中没有扩展字符串的类)。

确定错误在该行吗?E有边界吗?给我们看更多的代码。类声明?我无法重现此错误。演员对我来说很好。你确定错误在那一行吗?E有边界吗?给我们看更多的代码。类声明?我无法重现此错误。强制转换对我来说很好。这是可能的,但不要期望泛型对象是一个可用的字符串。它将是一个或多或少带有随机值的字符串,并可能导致异常。@实际上,结果将是一个字符串或一个
ClassCastException
。我添加了一条注释来澄清这一点。这是可能的,但不要期望泛型对象是一个可用的字符串。它将是一个或多或少带有随机值的字符串,并可能导致异常。@实际上,结果将是一个字符串或一个
ClassCastException
。我添加了一条评论来澄清这一点。擦除发生在编译时。2. <代码>包括
字符串
.1。擦除发生在编译时。2. <代码>包括
字符串