gpt4 book ai didi

Java:指向通用对象的非通用指针的含义?

转载 作者:行者123 更新时间:2023-12-02 07:18:07 25 4
gpt4 key购买 nike

我对 Java(和英语)还很陌生,所以请耐心等待。

尝试写一些类似...

Container con = new Container<Book>();
con.insert(new Book());
con.insert(new Car());

...并且没有收到任何类型的错误。但像这样的线条...

Car c = con.remove(); // removes the last inserted element for simplicity

说“错误:类型不兼容”,所以我把它改成了

Object carObj = (Car) con.remove();

并且成功了。我的问题是:当我说

new Container<Book>();

我创建了一个只能容纳 Book 类型对象的容器,但是由于指针(这是非泛型的?),我可以突然将任何类型的对象放入我的容器中。这里发生了什么?指针只能看到容器中任何内容的对象个性,但我不知道指针允许主要创建为通用的容器中具有对象个性的每个对象(我的表述可能是错误的)。因此,当我有一个非泛型指针时,创建泛型容器还是非泛型容器并不重要?它将始终被视为非通用容器(当我删除对象时我必须强制转换对象)?

new Container<Book>().insert(new Car()); // compiler error as excepted

好奇并让问题变得更糟(也许)。

Container<Car> cars = new Container();
cars.insert(new Book()); // compiler error: required Car, found Book

现在指针只能看到容器中的汽车个性。但它不允许我放入一本书,即使我将容器创建为非通用容器。为什么?

new Container().insert(new Car()); // works fine

不得不说,这既令人着迷又令人恼火......

最佳答案

您正在对引用进行操作:引用的类型将在编译时使用。插入Book进入Container<Car>显然是错误的,就像插入 Book 没有任何问题一样或Car进入Container .

同样,期待 Container.remove返回 Car当引用只是<Container>时是不正确的,因为没有理由期望返回的对象是 Car –可能是Book或者一条鱼。

关于Java:指向通用对象的非通用指针的含义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14664261/

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