제네릭에 문제가 있습니다. 잘못된 디자인 패턴을 사용했을 수 있습니다 ... 추상 클래스를 확장 할 때마다 12 줄의 제네릭을 정의해야한다면 무엇인가 잘못되었습니다 !!자바 범용을 사용하여 조합 폭발
현재 특정 유형의 게임을위한 프레임 워크를 작성 중입니다. 내 프레임 워크에는 사용자가 확장해야하는 많은 추상 클래스가 포함되어 있습니다. 이 클래스들 중 상당수는 서로를 알고 있으며 사용자는 자신이 정의한 새로운 메소드와 멤버 변수를 구현하고 사용할 수 있어야합니다. 그래서 제네릭을 사용하고 지금까지 작동합니다.
그러나 여기에 문제가 있습니다 : 5 개 클래스가 서로 알고있는 경우 5x5 = 25 개를 정의해야합니다. 이러한 클래스 중 하나만이 두 개의 인터페이스/추상 클래스를 알고있는 경우 해당 클래스 중 하나의 추상 버전을 작성하여 7x7 = 49 대체를 정의해야합니다.
예 :
public abstract class AbsGameClient<ConncetionTypeClass extends Connection,
FactionBaseClass extends AbsBaseFaction,
PlayerSlotChangedListenerClass extends IAbsPlayerSlotChangedListener<FactionBaseClass>,
GameClientClass extends AbsGameClient<ConncetionTypeClass,FactionBaseClass,PlayerSlotChangedListenerClass,GameClientClass,PlayerSlotClass,GameClientListenerClass>,
PlayerSlotClass extends AbsPlayerSlot<FactionBaseClass, PlayerSlotChangedListenerClass, GameClientClass>,
GameClientListenerClass extends IAbsGameClientListener>
implements DefaultTBSclientMessageFlags, DefaultTBSserverMessageFlags {...
그것은 작동하지만이 비슷한을 보관하기 위해 다른 디자인 패턴이 ... 코드 냄새처럼 보인다?
형식 매개 변수에 긴 이름을 사용하지 마십시오. T, S, ... 및 심지어 Z까지 사용할 수 있습니다. AbsGameClient (T extends Connection, ...>)의 ** T **는 ** ConnectionTypeClass **를 의미하는 것만 큼 명확합니다. 그렇지 않으면 지저분 해 보입니다 – MockerTim