gpt4 book ai didi

Java:使用对象名称的字符串输入创建对象

转载 作者:行者123 更新时间:2023-12-02 06:28:16 24 4
gpt4 key购买 nike

我有两个类,狗和猫:

class Dog{
public void speak(){
System.out.print("Woof!");
}
}

class Cat{
public void speak(){
System.out.print("Meow!");
}
}

在我的 main 中,我将名称作为字符串,可以是“Cat”,也可以是“Dog”。

public static void main(String [] args){
Scanner sc = new Scanner(System.in);
String name = sc.next();

Class<?> cls = Class.forName(name);
Object object = cls.newInstance();
}

但现在我希望能够调用该方法“speak”。但随后我必须将对象转换为猫或狗,因为“对象”显然没有内置的“说话”方法。所以我的解决方案是创建另一个类(顺便说一句,我不能使用 if 语句):

class Animal{
public void speak(){
}
}

然后“Cat”和“Dog”都可以扩展 Animal 并重写其方法。有没有其他方法可以在不使用其他方法/使用 if 语句的情况下执行此操作? (包括开关盒、三元运算符)。提前致谢。

另一个问题:如果我也将方法的名称作为输入,我将如何调用它?例如:

class Dog{
public void speak(){}
public void bark(){}
}

如果我将“speak”或“bark”作为字符串接收,我将如何在不使用 if 语句的情况下调用该方法?

最佳答案

您可以使用 Class.getMethod 通过反射来完成此操作和 Method.invoke .

不过,创建 Animal 类确实是最简洁的方法。是什么阻止你这样做?

关于Java:使用对象名称的字符串输入创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20308476/

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