就是第三张图这创建的是object类型的数组,那么这个数组的类型它可以创建为E类型的数组吗

img

img

img


第一个之前听课是说priority是泛型E的上限,所以在那里创建数组的时候,只能用priority[]这个类型去创建数组,这样做比较安全,但是为什么第二张图里面为什么key的类型是T而不是它的上限类型,也就是这个comparable接口类呢?
就是关于泛型这里对于一些问题还是不是很清楚,就是第三张图这创建的是object类型的数组,那么这个数组的类型它可以创建为E类型的数组吗?
然后现在就有点分不太清成员变量的类型是取E还或者是说取object类型,因为我感觉都差不多,如果是object类型的话那么就可以存储所有的类型数据,如果是泛型E的话,到创建对象的时候再确定下来好像也没什么很大的问题,然后关于安全性问题,之前听课是说如果用泛型E的话,那么会比较危险,因为它在运行期的时候才知道你要传递过去的类型,也就是发的第一张图里面那个Priority类型,但是不是成员属性的类型也经常会定义成泛型E吗,为什么有的时候可以这样定义,有的时候这样定义又会报错呢,感觉比较迷惑[破涕为笑]

这是泛型类型的协变

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答由chatgpt基于相关博客总结生成:

    问题标题: 第三张图中创建的是object类型的数组,可以创建为E类型的数组吗?

    在Java中,是无法直接创建泛型的数组的。创建一个泛型数组会导致编译错误。但是,我们可以通过创建一个Object类型的数组,并进行类型转换来实现创建泛型数组的效果。

    下面是一个示例代码,展示如何创建一个泛型数组:

    public class MyArray<E> {
        private Object[] array;
    
        public MyArray(int size) {
            // 创建Object类型的数组
            array = new Object[size];
        }
    
        public void set(int index, E element) {
            // 进行类型转换并赋值
            array[index] = element;
        }
    
        public E get(int index) {
            // 进行类型转换并返回
            return (E) array[index];
        }
    }
    

    在上面的示例中,我们创建了一个Object类型的数组,并通过泛型的set和get方法对应的位置进行类型转换,实现了泛型数组的效果。

    请注意,使用泛型数组时要注意类型安全性。因为数组本身是一个协变的容器,所以将一个元素插入到泛型数组,在编译时可能不会出现错误,但是在运行时可能会出现类型转换异常。因此,在使用泛型数组时应谨慎操作,确保类型的一致性。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^