我有一個在每個子類中重複的相同方法,我想將它重構爲超類中的一個方法。父類中的java繼承設置值
public class SubClass1 extends SuperClass {
private BoltHexHead bolt;
private void computeFoo() {
//Foo formula is identical in all subclasses. Need to move up
setFoo(bolt.getDiameter() + bolt.getPitch() + bolt.getTpi());
}
private void computeBar() {
//computeBar method in all subclasses but Bar formula is different amongst all subclasses
setBar(bolt.getDiameter() - 2*bolt.getPitch() - 3*bolt.getTpi());
}
private void computeSeparation() {
//computeSeparation method only exists for a Subclass 1
setSeparation(bolt.getLength() - 2*nut.getFlatDia());
}
public class SubClass2 extends SuperClass {
private BoltFlatHead bolt;
private void computeFoo() {
//Foo formula is identical in all subclasses. Need to move up
setFoo(bolt.getDiameter() + bolt.getPitch() + bolt.getTpi());
}
private void computeBar() {
//computeBar method here is different than in Subclass1
setBar(bolt.getDiameter() - 4*bolt.getPitch() - 1/3*bolt.getTpi());
}
private void computeProtrusion() {
//computeProtrusionmethod only exists for a Subclass 2
setProtrusionmethod(bolt.getThreadAngle() - 6*bolt.getTpi());
}
起初我張貼bolt
沒有得到在超集,但是在子類。我得到了什麼後,我的戰後初期工作是以下
public abstract class SuperClass {
protected Bolt<?> bolt; <-- this was added but uses wildcard
...bolt getters/setter
protected void computeFoo() {
//Foo formula pulled up from all subclasses
setFoo(bolt.getDiameter() + bolt.getPitch() + bolt.getTpi());
}
}
public class SubClass1 extends SuperClass {
//private BoltHexHead bolt; <-- commented this out in each subclass
}
這是一個JSF應用程序,並在每個控制器豆我實例的具體的聯合屬性的子類,然後設置特定螺栓。早先的設計決定是使用setter來設置子類中的螺栓(和其他屬性),而不是使用構造函數來完成;但是每次只有一個重構。
Controller for a Bolt Analysis using a HexHead Bolt
private SubClass1 sc1 = new SubClass1();
private BoltHexHead bolt;
sc1.setBolt(bolt);
sc1.computeResults();
Controller for a Bolt Analysis using a FlatHead Bolt
private SubClass2 sc2 = new SubClass2();
private BoltFlatHead bolt;
sc2.setBolt(bolt);
sc1.computeResults();
所以我的問題是,是否確定使用通配符Bolt<?> bolt
或者是有沒有更好的方法?
怎麼辦?我沒有從倒票中學到什麼。這是因爲我沒有根據SO要求提出問題,還是因爲我的Java方法不合適? – jeff
目前尚不清楚你想要達到的目標。子類「bolt」的值來自哪裏?爲什麼不使用構造函數? – Savior
@Pillar經常會因爲放太多的代碼而受到影響。我試圖讓一個超類的方法使用適用於所有子類的公式計算值。 – jeff