java - 限制通用向上转型

标签 java generics

假设我有带有两个参数的通用方法。

<T> void compare(T a, T b) {}

事实证明,可以传递任何类型的参数:T可能总是被解析为 Object ,因为任何其他类型都是 Object .

有没有办法让方法接受的参数完全相同的任何类型?

最佳答案

完全和同一个类(class)一样吗?不会。如果 A 和 B 共享一个父类 P,您始终能够将它们传递给一个需要 P 的泛型方法。 .

我认为限制它的唯一方法是添加如下参数:

<T> void compare(T a, T b, Class<T> clazz) {}

这会起作用,因为 Java 泛型是不变的,这意味着如果 A extends B , G<A>G<B>是完全不相交的类型(一个不扩展另一个)。例如,List<Person>List<Student>即使 Student extends Person 也是不兼容的类型。这并不直观,只是语言的限制,其他一些语言(例如 Scala)可以选择创建泛型类型:

  • 不变(就像 Java)
  • 协变(如果 A extends BG<A> extends G<B> )
  • 逆变(如果 A extends BG<B> extends G<A> )

关于java - 限制通用向上转型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61190372/

相关文章:

java - 如何修复某些手机中每秒发送数据的位置?

java - 请让我知道我的java代码是否正确?

c++ - 在 Swift 中使用 C++ 模板

java - 两个独立的泛型类型具有相同的删除?

java - 使用 Order by 准备好的语句来防止 SQL 注入(inject) java

java - Cucumber Java Maven - ExtendedCucumberOptions - 功能缺少步骤

java - 正则表达式匹配两个随机字符串之间的可选字符串

c# - 通用接口(interface)集合

Scala 转换为泛型时遇到问题

java - 这种情况下在 Java 中的方法实现