java - 通用数组创建

标签 java arrays generics

这是我正在使用的代码

public class aClass<T> {

    private T[] elements;

    public aClass(T[] elements) {
        this.elements = elements;
    }

    public void doSomething() {
        T[] newArray = (T[]) new Object[5];
        ...
    }

}

我见过有人说创建这样的数组是个坏主意,因为它不是类型安全的。但是,每次我使用它时,我都没有遇到任何问题。什么时候创建这样的数组会导致问题?

谢谢

最佳答案

这是一个导致问题的例子:

public class Main {

    public static class List<E extends Number> {

        private E[] myE;

        public void hello(E e) {
            E[] newArray = (E[]) new Object[5];
            for (int i = 0; i < newArray.length; i++) {
                newArray[i] = e;
            }
            myE = newArray;
        }

    }

    public static <T> T[] createArray(int size) {
        return (T[]) new Object[size];
    }

    public static void main(String[] args) throws IOException {
        List<Integer> integers = new List<Integer>();
        integers.hello(5);
    }
}

您的代码有效,因为当您声明通用参数时 <T>它是未绑定(bind)的,这意味着它扩展了 Object .当您将数组转换为 (T[]) 时你实际上是转换到(Object[])因为那是编译器能做的最好的事情。现在,如果您将数组保存在代码中,就不会有太多问题。但是,如果您的代码之外的某个人可以检索该数组并使用对象以外的类型实例化您的类,他将遇到 ClassCastException。

关于java - 通用数组创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10031771/

相关文章:

java - 递归 - Java

java - Android - 以编程方式设置警报对话框上的文本颜色列表项

java - 如何在 Java 中将 Map 转换为 List?

javascript - 如何将数据附加到嵌套数组元素

java - 使用indexOf从网站获取信息

arrays - 从不重复的数组中洗牌/随机化问题 (SWIFT)

arrays - 如何在lua中不将数组变成散列(防止数组变成散列)?

c# Web Api - 所有 api 响应的通用包装器类

java - Java中的泛型方法,判断类型

java - 如何查看一个对象是否更近似相等