麻烦骑马并在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 == ObjBObjA.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()替换AutoRadioSystemgetCurrentStation()调用。

同样的,

 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如果onull则返回false

还有其他问题。

在所有子类中定义equals方法,如AMRadioFMRadio等。 您可以使用Apache commons的EqualsBuilderhttp://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(); }