2013-10-09 158 views
2

我有這樣的代碼:抽象方法/請避免鑄造

public interface Position { 
    public int getX(); 
    public int setX(int x); 
    public int getY(); 
    public int setY(int y); 
} 

public StandardPosition implements Position { 
    // STANDARD implementation of Position here 
} 

public abstract class Mover { 
    public abstract Position move (Position originalPosition); 
} 

A「移動器」的東西,一些移動從初始位置到最終位置。

現在,這裏是有趣的部分...一些搬運工更復雜,並與位置對象的工作有點複雜。

public class ComplicatedPosition extends StandardPosition { 
// ADDS Y DIMENSION 
private int y; 
public int getY() { return(y); } 
public void setY(int y) { this.y = y ; } 
} 


public class MoreComplicatedMover extends Mover { 

    @Override 
    public void Position move(Position initialPosition) { 
    ComplicatedPosition q = (ComplicatedPosition) initialPosition; 
    // Do a transformation and 
    // return a new position 
    return(q); 
    } 

} 

在這裏,我的問題是...有沒有辦法避免的位置ComplicatedPosition鑄造......(我們是從界面到類轉換..似乎有點彆扭)... 另一種方式問這個問題是:還有其他方式來設置這個代碼嗎? 乾杯!

+0

您需要澄清一些您的代碼示例。 Position.setX()和Position.setY()應該沒有參數嗎? ComplicatedPosition是類還是接口?只有接口可以擴展其他接口,但接口無法實現,如示例中所示。 – Dev

+0

謝謝@Dev我只是做了編輯;-) – MadSeb

回答

3

好一兩件事你可以做的是使用泛型這樣的:

public abstract class Mover<T extends Position> { 
    public abstract T move(T originalPosition); 
} 

public class ComplicatedMover extends Mover<ComplicatedPosition> { 
    public ComplicatedPosition move(ComplicatedPosition p) { 
    //do stuff 
    } 
} 

但是我不知道如果這是你應該想要什麼。

btw;是你的Mover應該給一個新的位置或改變給定的位置? 就個人而言,如果您正在更改給定的職位,我會將其作爲void方法。

+0

擊敗我吧... +1 –

+0

謝謝..澄清:移動應該給一個新的位置;-) – MadSeb

+0

@MadSeb啊好吧,我被拋出因爲你的'ComplicatedMover'再次返回q;) – Alowaniak

0

如果ComplicatedPosition的API不同於StandardPosition(我認爲它是,那就是你正在投射的原因),更新你的接口並將所有需要的API放在那裏。然後,第一種方法是實現在StandardPosition這些額外的方法,乾脆把

throw new UnsupportedOperationException(""); 

更好的辦法是實現適配器模式,並有一個抽象類,像PositionAdapter它實現了所有這些額外的方法和投UnsupportedOperationException,然後讓

public class StandardPosition extends PositionAdapter { 
} 

這樣你就不必實現您的StandardPosition或任何其他實現類一堆不需要的方法。然後你可以擺脫你的鑄件並在界面上調用所有方法。 希望這有助於。