java - 有没有办法将泛型参数限制为数组?

标签 java arrays generics restriction

我尝试了“T extends Array”,但这不起作用,

public class Foo<T extends Array> {
    { ...}
}

public class Bar {
    {
        Foo<int[]> f; <-- Error
    }
}

据我所知,我认为这不可能,但是嘿,我不是 Java 大师

最佳答案

如果要将类型变量 T 限制为引用数组类型,则可以将 T 作为组件类型,并限制组件类型,并在需要数组类型的地方使用 T[],即代替

public class Foo<T extends Object[]> {
   T obj;
}

Foo<String[]> f;

你会有

public class Foo<T extends Object> {
   T[] obj;
}

Foo<String> f;

如果您也想允许 T 成为基元数组类型,那么如果不允许非数组引用类型,这是不可能的,因为像 int[]boolean[] 等基元数组类型的唯一父类(super class)型是 Object(也许还有 CloneableSerialized)。不存在“只是”原始数组和引用数组的父类(super class)型。您可以做的最严格的限制是这样的

public class Foo<T extends Cloneable & Serializable>

如果您这样做,您将无法对 T 执行任何操作,除非您可以对任何 Object 执行任何操作(请注意,CloneableSerializing 接口(interface)均不提供任何方法),因此您最好根本不限制 T

关于java - 有没有办法将泛型参数限制为数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49330607/

相关文章:

Java - 为什么 DualPivotQuicksort 有重复的代码?

ios - 是否可以通过 watch 连接将复杂的数组从 iPhone 发送到 Apple Watch?

java - 当 marionette 通过 Selenium 3.12.0 变为 false 时,无法找到与 Firefox 匹配的功能集

java - 为什么我的 JavaFX 应用程序的拖动例程在 JavaFX 8 中中断?

java - 使用自定义排序功能实现 Treeset

arrays - 在Fortran中访问返回数组的元素

java - 创建一个可以转换不同类列表的函数

c# - 在 C# 中创建仅适用于特定类型的通用函数

swift - 您可以强制使用两种类型的泛型来确保这些类型不相同吗?

java - java中什么时候使用transient修饰符?