gpt4 book ai didi

java - 从泛型推断类型

转载 作者:行者123 更新时间:2023-12-02 04:57:16 25 4
gpt4 key购买 nike

有没有办法推断对象 O 的类型,如下例所示(无法编译):

public interface LogUpdateListener<S extends LogSet<O>> {
void logUpdated(O object);
}

因此,在上面的示例中,LogSet 是通用的,采用 O,其中 O 扩展了 LogObject。如果 S 扩展了 LogSet,那么使用 S 是否可以推断出 O 的类型以用作 logUpdated< 的类型 方法?

这是明确执行此操作的唯一方法,如下所示:

public interface LogUpdateListener<O extends LogObject, S extends LogSet<O>>

我希望我的问题有意义。

最佳答案

我不确定我是否理解了您的问题,但如果您问的是:

  1. 如何申报 LogUpdateListener ...
  2. 类型 S它扩展了“LogSet 类型 O ”,...
  3. 在其中输入 O延伸LogObject

然后,是的,您将其声明为:

public interface LogUpdateListener<O extends LogObject, S extends LogSet<O>>

这是因为如果 O是一个类型参数(这就是我认为你所说的),那么你需要在类型参数部分声明它。如果你也想绑定(bind)O属于 LogObject 的子类型,您需要添加该绑定(bind)以及类型参数声明。

但是,您应该记住:

  • 对于类型 P哪里Pproper subtypeO (P < O)
  • LogSet<P> 不是 LogSet<O> 的子类型

这可能意味着您需要使用 LogSet<? extends O> 的通配符参数化类型或LogSet<? super O>在你的方法声明中,例如,如果你想从/到(按顺序)复制其他 LogSet对象。

关于java - 从泛型推断类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28649109/

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