泛型类中的静态方法?

新手上路,请多包涵

在 Java 中,我想要这样的东西:

 class Clazz<T> {
  static void doIt(T object) {
    // ...
  }
}

但我明白了

无法对非静态类型 T 进行静态引用

我不了解基本用途之外的泛型,因此无法理解这一点。我无法在互联网上找到有关该主题的太多信息,这无济于事。

有人可以通过类似的方式澄清这种使用是否可能吗?另外,为什么我最初的尝试没有成功?

原文由 André Chalella 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 782
2 个回答

您不能在静态方法或静态字段中使用类的泛型类型参数。该类的类型参数仅在实例方法和实例字段的范围内。对于静态字段和静态方法,它们在类的所有实例之间共享,甚至是不同类型参数的实例,因此显然它们不能依赖于特定的类型参数。

您的问题似乎不需要使用类的类型参数。如果您更详细地描述您正在尝试做什么,也许我们可以帮助您找到更好的方法。

原文由 newacct 发布,翻译遵循 CC BY-SA 2.5 许可协议

在您实例化一个类型之前,Java 不知道 T 是什么。

也许您可以通过调用 Clazz<T>.doit(something) 来执行静态方法,但听起来您不能。

另一种处理方式是将类型参数放在方法本身中:

 static <U> void doIt(U object)

这不会让你对 U 有正确的限制,但总比没有好….

原文由 Jason S 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题