多态性:将子类分配给超类

use*_*993 0 java generics polymorphism map

两者都一样吗?

ParentClass object=new ChildClass();

ParentClass object = (ParentClass) new ChildClass();
Run Code Online (Sandbox Code Playgroud)

如果我想创建一个将字符串映射到Children Objects的地图

"dog"->childA;
"cat"->childB
Run Code Online (Sandbox Code Playgroud)

我该如何申报地图?

Map<String,Parent>
or
Mpa<String,T extends Parent>
Run Code Online (Sandbox Code Playgroud)

我不确定第二个是否正确,但我在某处读到了

Roh*_*ain 5

两者都一样吗?

在第二次分配中不需要强制转换.第一个是有效的任务.您可以将子类对象分配给超类引用.

我该如何申报地图?

你应该以第一种方式宣布它.A Map<String, Parent>将能够保存Parent或其任何子类的实例.

至于你的第二个声明:

Map<String, T extends Parent>  // This won't compile
Run Code Online (Sandbox Code Playgroud)

这不是在声明map时指定类型参数中的bound的正确方法.你不能在那里使用有界类型参数.您应该使用通配符绑定,或者仅使用类型参数 - Map<String, T>,T在声明该类型的地方声明边界(可能在声明地图的泛型类中).所以,你可以使用<? extends Parent>.以这种方式声明地图的问题是,你将无法在其中添加任何内容,接受null.

相关文章:

参考: