gpt4 book ai didi

Java:使用具有通配符类型参数的类函数

转载 作者:行者123 更新时间:2023-12-01 16:53:45 25 4
gpt4 key购买 nike

我在 (B) 行收到编译错误“AlphaData 无法通过方法调用转换转换为 CAP#1”。我的解决方法是将 (A) 行的 indexOf() 签名更改为 Object 类型而不是 T 类型。但是,这样我就失去了类型检查。此外,如果“数据”也被声明为 BetaData 类型,我希望 B 行能够工作。有办法做我想做的事吗?

public class Test
{
class AlphaData {} // base class for data

class BetaData extends AlphaData {} // subclass for data

abstract class BasicAdapter<T> // a generic adapter
{
abstract int indexOf (T item); //(A)
}

class BetaAdapter extends BasicAdapter<BetaData> // adapter subclass with binding
{
int indexOf (BetaData item) { return 0; }
}


BasicAdapter<? extends AlphaData> adapter = null;

Test()
{
AlphaData data = null;
int index = adapter.indexOf (data); //(B) -- compile error here
}
}

最佳答案

adapter.indexOf无法安全地传递 AlphaData因为它具体可能是 BasicAdapter<BetaData> ;虽然data具体可以是 BetaData 的一个实例,它可以是简单的AlphaData ,或 AlphaData 的任何其他不相关子类.

要记住的缩写是PECS:

  • 生产者 extend
  • 消费者 super

您想要adapter 消费 AlphaData ,所以你需要一个BasicAdapter<? super AlphaData> .

关于Java:使用具有通配符类型参数的类函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35655037/

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