gpt4 book ai didi

Java泛型类型继承错误

转载 作者:行者123 更新时间:2023-12-02 09:14:49 26 4
gpt4 key购买 nike

在 Android Studio 中我遇到以下错误:

java: incompatible types: java.lang.Object cannot be converted to java.lang.String

我认为 b1 和 b2 的行为应该相同,但事实并非如此。

有没有办法让它们表现相同(当然不改变它们的类型)?

这是输入的代码:

public class Test
{
class A<T>
{
T t;
T getT()
{
return t;
}
}
class AS extends A<String>
{

}
class B<T> extends AS
{

}

B<Object> b1;
B b2;

public void test()
{
String t3 = b1.getT();
String t4 = b2.getT();
}
}

最佳答案

问题是 B是参数化类型,但是 b2被声明为具有原始 B作为其类型。

您用 b1 进行演示那B的类型参数不同于 A的,即使它们具有相同的名称,因此 B 的类型参数与 getT() 的返回类型无关。方法继承自A<String> 。但是,当您使用原始类型时,您会完全删除该类型,包括其父类(super class)型。

A的类型参数是无界的,它的删除产生类型 Object ,因此这是 b2.getT() 的类型。当然,Object不可分配给String .

您至少可以通过两种方式解决此问题:

  1. 不要对 b2 使用原始类型。如果您不关心其类型参数,则使用 B<?> 。或者,

  2. 删除类 B的类型参数。在您的示例中,它没有用于任何用途,因此这将是最干净的做法。仅仅因为它的父类(super class)是通用的并不意味着 B必须如此。

关于Java泛型类型继承错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41618302/

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