2010-03-04 74 views
0

我將我的遊戲移動到其自己的包中,以使其在未來的遊戲中很有用。 我實現了一個建築商類的建議這裏的用戶的一個:Interfaces, static classes problem將Builder類暴露給客戶端代碼

public final class Builders { 
    public static Builder<? extends Sprite> newGameObjectBuilder(Point location, int drawable) { 
     return new GameObjectImpl.GameObjectBuilder(location, drawable); 
    } 
} 

現在的問題是,客戶端代碼不能使用助洗劑的方法(下文實施例)。我得到以下幾點:

"The method onReceiveKey(new Sprite.ReceiveKeys(){}) is undefined for the type Builder<capture#4-of ? extends Sprite>" 

基本上我不能使用公共靜態調用GameObjectBuilder內的任何方法。

onReceiveKey不起作用。只有Builder接口的build()方法可用。

public static Sprite newSoldier(int x, int y) { 
    return Builders.newGameObjectBuilder(new Point(x,y), R.drawable.soldier) 
    .onReceiveKey(new Sprite.ReceiveKeys() { 

     @Override 
     public void onKeyUp(int keyCode, Sprite self, Room room) { 


     } 

     @Override 
     public void onKeyDown(int keyCode, Sprite self, Room room) { 
      if(keyCode == KeyEvent.KEYCODE_DPAD_DOWN) { 
       self.moveY(room, 1, Direction.S); 
      } 
      else if(keyCode == KeyEvent.KEYCODE_DPAD_UP){ 
       self.moveY(room, -1, Direction.N); 
      } 
      else if(keyCode == KeyEvent.KEYCODE_DPAD_LEFT){ 
       self.moveX(room, -1,Direction.W); 
      } 
      else if(keyCode == KeyEvent.KEYCODE_DPAD_RIGHT){ 
       self.moveX(room, 1, Direction.E); 
      } 
     } 
    }) 
    .build(); 
} 

回答

1

的事情是你的建設者就是這樣

public interface Builder<T> { 
    public T build(); 
} 

只是做

public interface SpriteBuilder<T extends Sprite> extends Builder<T> { 
    Builder<T> onReceiveKey(Sprite.ReceiveKeys receiver); 
} 

,改變建設者

public final class Builders { 
    public static SpriteBuilder newGameObjectBuilder(Point location, int drawable) { 
     return new GameObjectImpl.GameObjectBuilder(location, drawable); 
    } 
} 

和你GameObjectBuilder

class GameObjectImpl extends AbstractSprite { 
    public static class GameObjectBuilder implements SpriteBuilder { 
    ... 
    } 
} 
+0

當我做Builder 時出現語法錯誤。我已經把這個接口放在我的Sprite接口中 – jax 2010-03-04 11:50:55

+0

我得到了這個工作,但我不得不聲明像這樣SpriteBuilder extends Builder jax 2010-03-04 14:22:46

+0

是的,你的第二個評論是要走的路。我會編輯它! – Lombo 2010-03-05 03:20:55