gpt4 book ai didi

Java : generic classes

转载 作者:行者123 更新时间:2023-12-01 15:49:31 24 4
gpt4 key购买 nike

我从我的书中读到了这段代码:

class B extends A {...}
class G<E> {
public E e;
}
G<B> gb = new G<B>();
G<A> ga = gb;
ga.e = new A();
B b = gb.e; // Error

为什么B b = gb.e;会出现错误?我们没有给 b 分配任何内容,因此 gb.e 来自类型 B。

最佳答案

按照您的具体设置,我在您尝试创建对对象 G 实例的第二个引用的行处从编译器(Sun Java 编译器版本 1.6.x)收到错误:

G.java:6: incompatible types
found : G<B>
required: G<A>
G<A> ga = gb;
^
1 error

尝试交换发生转换的位置也会失败:

代码:

G<A> ga = new G<A>();
G<B> gb = ga;
gb.e = new A();
B b = gb.e;

错误:

G.java:6: inconvertible types
found : G<A>
required: G<B>
G<B> gb = (G<B>)ga;
^
G.java:7: incompatible types
found : A
required: B
gb.e = new A();
^
2 errors

您确定这不是前面几行的问题吗?我在这个案子上运气不佳。

即使您成功做到了这一点,这仍然会失败,因为在尝试获取新的 B 引用时不知道正确的类型。由于您只能向上转换(因此,A instance = new B() 可以。B instance = new A() 则不行),因此不会使采取 A 的实例并将其沿层次结构向下移动到 B 的类型是有意义的。

关于Java : generic classes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6398549/

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