Я перемещаю свою игру в свой собственный пакет, чтобы сделать его полезным в будущих играх. я Реализован класс строителей, как предложил один из пользователей здесь: 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
не работает. Доступен только метод build()
интерфейса Builder
.
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();
}
Когда я делаю Builder Я получаю синтаксическую ошибку. Я поместил этот интерфейс в свой интерфейс Sprite –
jax
Я получил эту работу, но мне пришлось объявить, как этот SpriteBuilder extends Builder –
jax
Да, ваш второй комментарий - это путь. Я отредактирую его! – Lombo