
我现在被困,不知道更容易解决这个问题,也许你可以帮助我.
我有一个名为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子句?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)