作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我试图指定一个泛型类必须是一个数组,或者更好的是原始数组。到目前为止,这就是我的工作:
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/
使用登录后,我想吐出用户名。 但是,当我尝试单击登录按钮时, 它给了我力量。 我看着logcat,但是什么也没显示。 这种编码是在说。 它将根据我在登录屏幕中输入的名称来烘烤用户名。 不会有任何密码。
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎是题外话,因为它缺乏足够的信息来诊断问题。 更详细地描述您的问题或include a min
我是一名优秀的程序员,十分优秀!