麻烦骑马并在java中使用equals方法
我在试图弄清楚如何在AM FM和XM之间比较selectedRadio时遇到问题,以便我可以确定它当前在哪一个然后返回特定无线电的电台。 我知道我需要equals方法我只是不确定正确的方法来使用它来获得我正在寻找的结果。
public class AutoRadioSystem { private Radio selectedRadio; private AMRadio radioAM; private FMRadio radioFM; private XMRadio radioXM; //I'm not sure if this is the correct way to do this so that selectedRadio equals the object of radioAM public AutoRadioSystem() { selectedRadio = radioAM; } //trying to figure out how to compare if selectedRadio is one of these. public double getCurrentStation() { if (selectedRadio == radioAM) { return radioAM.getCurrentStaion(); } else if (selectedRadio == radioFM) { return radioFM.getCurrentStaion(); } return 0.0; } // its supposed to switch the radio from AM to FM when this method is called public void selectRadio() { if (selectedRadio.equals(radioAM)) selectedRadio = radioFM; } public boolean equals (Object o) { if (o == null) return false; if (! (o instanceof AutoRadioSystem)) return false; AutoRadioSystem other = (AutoRadioSystem) o; return this.selectedRadio == other.selectedRadio; } public static void main (String [] args) { AutoRadioSystem c = new AutoRadioSystem(); c.selectRadio(); double b = c.getCurrentStation(); System.out.println(b); } } public abstract class Radio { double currentStation; RadioSelectionBar radioSelectionBar; public Radio() { this.currentStation = getMin_Station(); } public abstract double getMax_Station(); public abstract double getMin_Station(); public abstract double getIncrement(); public void up() { } public void down() { } public double getCurrentStaion() { return this.currentStation; } public void setCurrentStation(double freq) { this.currentStation = freq; } public void setStation(int buttonNumber, double station) { } public double getStation(int buttonNumber) { return 0.0; } public String toString() { String message = ("" + currentStation); return message; } public boolean equals (Object o) { if (o == null) return false; if (! (o instanceof Radio)) return false; Radio other = (Radio) o; return this.currentStation == other.currentStation; } public static void main(String[] args) { Radio amRadio = new AMRadio(); System.out.println(amRadio); Radio fmRadio = new FMRadio(); System.out.println(fmRadio); Radio xmRadio = new XMRadio(); System.out.println(xmRadio); } } public class FMRadio extends Radio { private static final double Max_Station = 108.0; private static final double Min_Station = 88.0; private static final double Increment = .01; public FMRadio() { currentStation = Min_Station; } public double getMax_Station() { return this.Max_Station; } public double getMin_Station() { return this.Min_Station; } public double getIncrement() { return this.Increment; } public String toString() { String message = ("FM " + this.currentStation); return message; } }
要点:(从post底部移动)
您将要了解测试ObjA == ObjB
, ObjA.equals(ObjB)
和ObjA instanceof ClassB
之间的区别。
这种方法
public double getCurrentStation() { if (selectedRadio == radioAM) { return radioAM.getCurrentStaion(); } else if (selectedRadio == radioFM) { return radioFM.getCurrentStaion(); } return 0.0; }
可能不会像你期望的那样工作。 如果你在Radio基类(你做过)中实现了double getCurrentStation()
方法,你可以这样做:
public double getCurrentStation() { return selectedRadio.getCurrentStation(); }
但这可能AutoRadioSystem
过头了,所以你应该用AutoRadioSystem
getCurrentStation()
替换AutoRadioSystem
的getCurrentStation()
调用。
同样的,
public void selectRadio() { if (selectedRadio.equals(radioAM)) selectedRadio = radioFM; }
不会像你期望的那样工作。 你可能想要类似的东西
public void selectRadio() { if (selectedRadio. instanceOf AMRadio)) selectedRadio = new FMRadio(); }
也,
if (o == null) return false; if (! (o instanceof AutoRadioSystem)) return false;
可以简化为
if (! (o instanceof AutoRadioSystem)) return false;
因为o instanceof SomeClass
如果o
为null
则返回false
。
还有其他问题。
在所有子类中定义equals
方法,如AMRadio
, FMRadio
等。 您可以使用Apache commons的EqualsBuilder
。 http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/builder/EqualsBuilder.html
使用EqualsBuilder
典型equals
方法如下所示。 它使用reflection来比较平等。
public boolean equals(Object obj) { return EqualsBuilder.reflectionEquals(this, obj); }
在比较时,不要使用==
因为它检查引用相等,而不是逻辑相等。 使用equals
方法之类的
if (selectedRadio.equals(radioAM)) { return radioAM.getCurrentStaion(); }