java - 编译器提示强制转换为同一捕获组

标签 java generics

以下内容会引发编译错误,因为 foo.getClass() 与 F 以某种方式扩展 Foo 的捕获组不同:

public <F extends Foo> F create (final F foo){

     return foo.getClass().cast(foo);

   }

以下工作正常。

return foo;

谢谢。

最佳答案

Object#getClass() returns a Class<? extends Foo> ,不是Class<F extends Foo> .

The actual result type is Class<? extends |X|> where |X| is the erasure of the static type of the expression on which getClass is called.

删除<F extends Foo>是上限,Foo 。因此Class#cast()调用大致相当于

return (Foo) foo;

而不是

return (F) foo;

正如您现在可能已经发现的那样,Foo不是F extends Foo (声明的方法返回类型),所以编译器不会让你返回 Foo .

关于java - 编译器提示强制转换为同一捕获组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12289573/

相关文章:

Java 泛型、扩展泛型和抽象类

java - 程序因文本字段为空而崩溃

java - 在 Hibernate 中插入/更新一个实体与另一个引用的实体

JAVA - 它是 java.util.Calendar 类中的错误还是什么?

generics - 如何使结构字段成为泛型类型

c# - 如何获取旧式集合中项目的类型?

C#泛型继承

java - 启动画面不消失

java - 如果日期无效,Spring mvc Joda Datetime 转换器将失败

Java 泛型类数组