2014-01-30 1 views
0

안녕하세요 저는 게임을하고 있는데 가슴, 물건 및 음식을 만들 수 있습니다.구현 방법에 대한 다른 열거 유형

Spawn 패키지에 ISpawn이라는 인터페이스가 있습니다.

패키지 Spawn에서 나는 큰 시스템이기 때문에 가슴에 물건을 다룰 수있는 chest이라는 패키지가 있습니다.

패키지 생성시 food.java 및 items.java가 있습니다.

public void spawn(int x, int y); 

그러나이 같은 그래서 하나의 문제는, 내가 열거 형을 포함 할 필요가 가슴 & 음식,있다 :

ChestHandler, 음식, 항목은 모두 하나의 방법을 포함하는 인터페이스 ISpawn를 구현하고 있습니다 :

public void spawn(int x, int y, chestType type) { 
    Chest chest = HungerGamesFactory.buildChest(type, x, y, chestCount); 
    chests.put(chestCount, chest); 
    chestCount++; 
} 

인터페이스를 암시하고있어 다른 클래스에 대해 chestType을 사용할 수 없어 다른 열거 형을 사용해야합니다.

나는이 아이디어를 내놓았다 :

public void spawn(int x, int y, Enum<?> e) { 
    chestType type = (chestType) e; 
    Chest chest = HungerGamesFactory.buildChest(type, x, y, chestCount); 
    chests.put(chestCount, chest); 
    chestCount++; 
} 

가 좋은 해결책 & 디자인인가? 이 일명 청소기를 할 수있는 더 좋은 방법이 있습니까?

+0

정확히 확실하지는 않지만'e'를'chestType'으로 변환 할 필요가 없다고 생각합니다. 그것 이외에, 그것은 좋아 보인다. –

답변

2

그것은 정확히 당신이 게시 코드 분명하지만, 난 당신이 ISpawn에 제네릭 형식 매개 변수를 추가해야한다고 생각하지 :

public interface ISpawn<T> { 
    public void spawn(int x, int y, T type); 
} 

를 그런 다음 구현 방법에서 사용되는 특정 유형을 지정할 수 있습니다 :

public class Chest implements ISpawn<ChestType> { 
    @Override 
    public void spawn(int x, int y, ChestType type) { 
     ... 
    } 
} 

참고이 당신이 type 캐스팅 할 필요가 없습니다 의미 - 그것은 단지 ChestType 인스턴스에 호출 할 수 있습니다.

유형 T을 열거 형으로 제한하려면 ISpawn<T extends Enum<T>>을 사용합니다.

+0

감사! 좋은 아이디어는 그것을 생각하지 않았다. – Artemkller545