泛型类中的静态方法?

2022-08-31 06:02:01

在Java中,我希望有这样的东西:

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

但我得到

Cannot make a static reference to the non-static type T

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

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


答案 1

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

您的问题似乎不需要使用类的类型参数。如果您更详细地描述您要执行的操作,也许我们可以帮助您找到更好的方法。


答案 2

Java不知道是什么,直到你实例化一个类型。T

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

处理事情的另一种方法是将type参数放在方法本身中:

static <U> void doIt(U object)

这并不能让你对U有正确的限制,但它总比没有好。


推荐