gpt4 book ai didi

java - 从 Java 中的泛型类型访问对象变量

转载 作者:行者123 更新时间:2023-12-04 05:54:18 24 4
gpt4 key购买 nike

我是通过 Java 学习 OOP 的一年级学生。
我试图理解泛型类型,在下面的例子中,我的印象是 disguisedAs() 返回指向对象实例的指针。不是这种情况。
为什么我的代码不工作,我怎样才能编译和运行它?
提前致谢!

public class GenericTest {
public static void main(String[] args) {
Animal tux = new Penguin();
DisguisedPerson<Animal> dave = new DisguisedPerson<Animal>(tux, "Dave");
dave.disguisedAs().call();
dave.reveal();
}
}
interface Disguised <T> {
T disguisedAs();
}
class Person {
String name;

Person(String name) {
this.name = name;
}
}
class DisguisedPerson<U> extends Person implements Disguised<U> {
U resembles;
DisguisedPerson(U costume, String name) {
super(name);
resembles = costume;
}

public U disguisedAs() {
return resembles;
}

void reveal() {
System.out.println(name + " was dressed up as a " + disguisedAs().species); // returns error: cannot find symbol!
}
}
abstract class Animal {
String species;
String call;

Animal(String c) {
species = this.getClass().getName();
this.call = c;
}
void call() {
System.out.println(this.call + "! ImA " + this.species);
}
}
class Penguin extends Animal {
Penguin() {
super("Pip");
}
}

最佳答案

您的电话确实有效,因为 U可以是任何类型。

如果您让 U 扩展 Animal,那么您可以使用 Animal 的字段/方法。

class DisguisedPerson<U extends Animal>

你必须这样做或者你可以写
DisguisedPerson<Integer> dave = new DisguisedPerson<Integer>(1, "One");

关于java - 从 Java 中的泛型类型访问对象变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9706241/

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