是否有使用最终类、枚举或记录类型作为类型参数绑定的用例?

Jes*_*per 7 java generics

您可以使用 Java 中的绑定来限制类型参数。例如:

interface Foo<T extends Bar> {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

您可以使用多种类型进行绑定,包括接口、类、参数化类型和类型参数。换句话说:Bar可以是接口、类等(不能是基元或数组类型)。

您还可以使用finalenumrecord类型作为边界。所以当Bar是一个finalenum或时,上面的方法仍然有效record

但是enumandrecord类型是隐式的final- 不可能创建enumor的子类型record。这意味着当您使用enumorrecord作为类型参数绑定时,填充类型参数的唯一可能性是使用该特定enumrecord类型本身作为类型参数。课程也是如此final

Foo<T>如果 ifT不能是它自身以外的任何东西,那是没有意义的Bar。在这种情况下,您也可以完全省略类型参数Foo并直接使用Bar

在某些情况下,您可以使用finalenumrecord类型作为类型参数绑定吗?

Gho*_*ica 4

在某些情况下,您可以使用最终类、枚举或记录类型作为类型参数绑定吗?

不。

例如,请参阅 Angelika Langer 的常见问题解答。这种界限没有任何有用的应用。


那为什么允许呢?
经过!

不过,一种可能的解释是:它使语言变得更简单。额外的约束需要额外的检查,因此需要额外的实施成本。

  • @Jesper 为什么要用这些类型的规则使语言变得复杂,当你也可以允许它的时候。它不会引起问题并允许简单性,并进行代码更改,使非最终(或最终)的事情不那么痛苦,等等。 (4认同)