java– 使用变量类名而不是许多if子句?

java– 使用变量类名而不是许多if子句?,第1张

概述我现在被困,不知道更容易解决这个问题,也许你可以帮助我.我有一个名为Animal的接口和许多实现它的动物类.编辑:接口必须是错误的:publicinterfaceAnimals{Integerlifespan=0;publicIntegergetLifespan();}在一个函数中,我得到一些随机的动物对象,我想得到

我现在被困,不知道更容易解决这个问题,也许你可以帮助我.

我有一个名为Animal的接口和许多实现它的动物类.
编辑:接口必须是错误的:

public interface Animals {    Integer lifespan = 0;    public Integer getlifespan();} 

在一个函数中,我得到一些随机的动物对象,我想得到它的变量.

if (animal instanceof GuineAPIg) {            lifespan = ((GuineAPIg) animal).getlifespan();            age = ((GuineAPIg) animal).getAge();            value = ((GuineAPIg) animal).getValue();}if (animal instanceof Rabbit) {            lifespan = ((Rabbit) animal).getlifespan();            age = ((Rabbit) animal).getAge();            value = ((Rabbit) animal).getValue();}

现在我需要为每一种动物设置if子句,必须有一种更简单的方法,对吧?我究竟做错了什么?

EDIT2:
完整的接口和类:

public interface Animals {final Integer ID = 0;Integer prize = 999999;Integer value = 0;Integer age = 0;Integer lifespan = 0;String[] colors = {        "c_bw", "c_w", "c_brw"};String name = null;String finalcolor = null;public String[] getcolors();public Integer getPrize();public Integer getID();public Integer getlifespan();public Integer getAge();public Integer getValue();public String getname();public String setname(String animalname);public String setFinalcolor(String finalcolor);}class GuineAPIg implements Animals {private final Integer ID = 0;private Integer prize = 10;private final Integer difficulty = 0; // easyprivate final Integer licenceNeeded = 0;private Integer value = 5;private Integer age = 0;private String[] colors = {    "c_bw", "c_w", "c_brw"};private String name = null;private String finalcolor = null;@OverrIDepublic Integer getPrize() {    return prize;}public voID setPrize(Integer prize) {    this.prize = prize;}public Integer getDifficulty() {    return difficulty;}public Integer getlicenceNeeded() {    return licenceNeeded;}@OverrIDepublic String[] getcolors() {    return colors;}public Integer getID() {    return ID;}@OverrIDepublic Integer getlifespan() {    return null;}public String getname() {    return name;}public String setname(String name) {    this.name = name;    return name;}public String getFinalcolor() {    return finalcolor;}public String setFinalcolor(String finalcolor) {    this.finalcolor = finalcolor;    return finalcolor;}public Integer getValue() {    return value;}public voID setValue(Integer value) {    this.value = value;}public Integer getAge() {    return age;}public voID setAge(Integer age) {    this.age = age;}}class Rabbit implements Animals {private final Integer ID = 1;private Integer prize = 15;private Integer lifespan = 30;private Integer difficulty = 0; // easyprivate final Integer licenceNeeded = 1;private Integer value = 7;private Integer age = 0;private String[] colors = {        "c_b", "c_w", "c_br"};private String name = null;private String finalcolor = null;@OverrIDepublic Integer getPrize() {    return prize;}public voID setPrize(Integer prize) {    this.prize = prize;}public Integer getDifficulty() {    return difficulty;}public Integer getlicenceNeeded() {    return licenceNeeded;}@OverrIDepublic String[] getcolors() {    return colors;}public Integer getID() {    return ID;}@OverrIDepublic Integer getlifespan() {    return null;}public String getname() {    return name;}public String setname(String name) {    this.name = name;    return name;}public String getFinalcolor() {    return finalcolor;}public String setFinalcolor(String finalcolor) {    this.finalcolor = finalcolor;    return finalcolor;}public Integer getValue() {    return value;}public voID setValue(Integer value) {    this.value = value;}public Integer getAge() {    return age;}public voID setAge(Integer age) {    this.age = age;}}

解决方法:

在您的小代码示例中,您可以简单地让Animals接口具有getlifespan(),getAge()和getValue()方法,并避免使用转换和if语句:

lifespan = animal.getlifespan();age = animal.getAge();value = animal.getValue();

您没有显示界面的定义,但根据您的问题,Animal界面可能已经拥有所有这些方法.

编辑:

你的动物界面(BTW Animal会是一个更好的名字)只定义了getlifespan().如果你向它添加其他方法(假设所有实现此接口的类都有这些方法),你将能够在不进行强制转换的情况下调用它们.

总结

以上是内存溢出为你收集整理的java – 使用变量类名而不是许多if子句?全部内容,希望文章能够帮你解决java – 使用变量类名而不是许多if子句?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1113571.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存