aboutme.XML
没有抛出错误,或者没有执行此操作?
一个如何有用的例子是这样的:
public <? extends Foo> FooExtension = new FooAugmentation();
主代码:
public class Human{
private String localName;
private <? extends Animal> FavoriteAnimalInstance;
public Human(String name, <? extends Animal> fav){
localName=name;
FavoriteAnimalInstance = fav;
}
public <? extends Animal> getFavoriteAnimal(){
return FavoriteAnimalInstance();
}
}
或者我是否比那更容易使事情复杂化?
答案 0 :(得分:2)
由于讨论开始失控......
您的代码如果有效,将导致人类对象拥有最喜欢的动物。但是Human
无法告诉编译器,它是什么特定类型的动物,因为它所知道的只是&#34;延伸Animal
(或Animal
本身的东西)&#34;
实际上,它与......相同。
private Animal animal;
显然,你不想在那里对你的动物进行硬编码......
private Seymore favoriteAnimalInstance;
所以,唯一真正的选择&#34;你有,正在让人类的实例知道最喜欢的动物是什么......
public class Human<A extends Animal> {
private A favoriteAnimal;
public A getFavoriteAnimal(){
return favoriteAnimal;
}
}
...
public static void main(String[] args) {
Human<Seymour> fry = new Human<Seymour>();
// etc.
boolean petrified = fry.getFavoriteAnimal().isPetrifiedInDiamondium();
}
除此之外?没有多少选择,因为编译器需要先知道对象的类型,然后才能调用它上面的方法。如果编译器只知道&#34; Animal&#34;,那么你只有动物方法,即使运行时的实际对象极其复杂并且有许多其他方法。
是的,您可以反思在运行时分析对象并调用方法等等 - 但请相信我,这不是一个好主意,并且它不能解决这个问题。
哦,请用小写字母开始你的变量名,谢谢。另外&#34;实例&#34;这里非常多余,因为一切都不是一个类,显然是一个实例,所以它实际上并没有在这里添加任何有意义的东西。
答案 1 :(得分:0)
我认为你不应该把事情变得复杂,显然你可以把你的对象持有者作为父母,它会做同样的事情。我知道泛型很棒,但我想不是在这种情况下。
答案 2 :(得分:-2)
您已撰写公开<? extends foo> FooExtension
。变量类型声明在哪里。 <>
用于通用声明。