gpt4 book ai didi

Java 泛型和数组类型,不是你想的那样(例如来自泛型类型的数组)

转载 作者:太空狗 更新时间:2023-10-29 22:46:35 25 4
gpt4 key购买 nike

我试图指定一个泛型类必须是一个数组,或者更好的是原始数组。到目前为止,这就是我的工作:

interface Foo<T> {
void process( T data );
}

public class Moo implements Foo<int[]> {
void process( int[] data ) {
// do stuff here
}
}

这都是完全有效的 Java 代码并且可以工作,因为原始数组扩展了 Object。请注意,这个问题与我不断发现的所有其他 Java 数组一般性问题完全不同。在那种情况下,人们希望从泛型类型创建一个数组。

问题是类型 T 可以是任何扩展 Object 的对象。我想要的是做类似的事情:

<T extends ONLY ARRAYS>

<T extends ONLY PRIMITIVE ARRAYS>.

这可能吗?

编辑:最终目标是对传入的数组类型添加编译时检查。现在可以传入任何旧对象,并且编译正常。只有在抛出类转换异常时才会在运行时发现错误。事实上,这就是 Java 中泛型的全部意义所在,即添加更强大的编译时类型检查。

最佳答案

你不能这样做。没有类可以扩展数组,因此永远不会有满足通用参数 T extends Object[] 的类型。 (除了 Object[] 本身,但是你不会使用泛型。)

你可以做的是这样的:

public interface Foo<T extends Number> {
public void process(T[] data);
}

但是你可能会遇到装箱的性能问题。

关于Java 泛型和数组类型,不是你想的那样(例如来自泛型类型的数组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10423237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com