gpt4 book ai didi

java:使用Raw类型作为方法参数会删除参数成员中的所有参数化类型信息

转载 作者:搜寻专家 更新时间:2023-11-01 03:14:47 24 4
gpt4 key购买 nike

请解释为什么如果我在方法 test() 中使用原始类型 A,我的类型列表中的 get() 方法返回一个对象而不是 B。

public class test
{
public class B{}
public class C{}

public class A<T extends C>
{
private List<B> aBList;

public List<B> mGetBList()
{
return aBList;
}
}

public test(A pA) // Use of raw type - this is bad, I know!
{
B lB = pA.mGetBList().get(0); // Compile error: Type mismatch:
// cannot convert from Object to test.B

}
}

如果我声明

public test(A<?> pA)

get() 方法按预期返回 B。

最佳答案

+1 有趣的测试用例。

看起来删除会删除所有内容,所以在这种情况下,您最终得到的是。

公共(public)列表 mGetBList()

List 的删除将导致 public Object get( int ),当然不能将其分配给 B

如果方法签名中对原始类型没有强烈需求,请使用您提供的泛型形式,否则将对象转换为 B

B lB = (B) pA.mGetBList().get(0);

关于java:使用Raw类型作为方法参数会删除参数成员中的所有参数化类型信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1675243/

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