Java 泛型 - 如果调用的方法中不存在类的泛型类型,为什么会出现 "incompatible types"编译错误?

标签 java class generics compiler-errors generic-method

请注意下面的代码无法编译,方法结果分配失败:String s = a.method("abc"); .

编译错误:incompatible types: java.lang.Object cannot be converted to java.lang.String

但是,当改变A a时至A<?> a或发送至A<Object> a ,编译通过。

* 请注意类型 <T>该方法与类型 <O> 不同在类里面。

知道编译错误是什么吗?另外,为什么变量a中的通用定义解决了编译问题吗?

class A<O>
{
    O something;

    <T> T method(T t)
    {
        return t;
    }

    static void testJavaStrangeGenericDefinitionBehavior()
    {
        A a = null;

        String s = a.method("abc");
    }
}

最佳答案

A a = null;

应该是:

A<String> a = null; // or better yet, new A<String>();

尽管如此,您可以用任何类替换 String,因为正如您所说,TO 泛型是不同的类型。

一旦删除泛型参数,您就会丢失方法调用中的所有泛型,这本质上相当于调用:

Object method(Object t);

关于Java 泛型 - 如果调用的方法中不存在类的泛型类型,为什么会出现 "incompatible types"编译错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53655504/

相关文章:

java - 使用 'super' 关键字绑定(bind)泛型

java - com.fasterxml.jackson.databind.exc.InvalidDefinitionException

java - 如何在 Java ME 中的不同类之间切换显示

c++ - 调用其他文件的匿名命名空间中的函数的内联类方法

c# - 仅使用类项从网页获取特定数据

swift - 在 Swift 中引用自己的类型?

java - 使用 java.lang.reflect.Type 检查实例

java - JPanel 对 MouseEvents 没有反应?

C++ 错误 : 'no matching function for call to [class]::[function]'

java - 初始化 Map 的类型安全可变参数方法