我可以通过 Java 界面中指定的泛型来推断方法泛型类型吗?

Can I infer method generic type by generic specified in interface in Java?

提问人:leonbear 提问时间:5/22/2022 最后编辑:Mark Rotteveelleonbear 更新时间:5/22/2022 访问量:37

问:

基本上我需要实现这样的接口:

// T denotes input type, R for output type
public interface Seg<T, R> {
  int put(T);
  R get(int key);
}

现在我发现 T 和 R 之间存在功能依赖关系,例如:

T: int --(infer)--> R: String
T: float --(infer)--> R:ByteBuffer

所以现在我想知道有没有可能我只用接口指定 T,用 T 推断 R?


举个例子,下面的代码是我需要的(当然不能遵守):

public interface Seg<T> {
  int put(T);
  // infer the return type rather than specify in interface
  (T==Integer ? String : ByteBufjfer) get(int key);
}

任何一个词都将不胜感激,如果您提出任何系统学习这些事情的线索,我将不胜感激。

Java 泛型 接口

评论

4赞 Sweeper 5/22/2022
我不明白你说的“推断”是什么意思。你想写什么代码,而你目前不能写?你能展示一些无法编译的代码吗?RT
0赞 leonbear 5/22/2022
@Sweeper 谢谢你的建议!我编辑了这个问题,如果还不够,你可以告诉我。
1赞 racraman 5/22/2022
我没有看到 int 和 String 之间的关系,也没有看到 float 和 ByteBuffer 之间的关系。通过“推断”,您的意思是您的应用程序使用这些类型对(例如,您有 和 )?Map<Integer, String>Map<Float, ByteBuffer>
1赞 racraman 5/22/2022
你当然不能这样做,因为类型擦除意味着任何类型 T 在运行时都不可用。T==Integer
1赞 Sweeper 5/22/2022
这是对泛型的滥用。当您的类型适用于无限数量的 s 时,您应该使用泛型,而不仅仅是两个。只需编写两个接口即可。T

答: 暂无答案