gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 13:48:31 24 4
gpt4 key购买 nike

请注意下面的代码无法编译,方法结果分配失败: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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com