미래에 타사가 구현할 인터페이스가 있으며 기본 구현을 직접 제공합니다. 예제를 보여주기 위해 커플 만 사용할 것입니다.
현재는 다음과 같이 정의됩니다
안건:
public interface Item {
String getId();
String getName();
}
품목 스택 :
public interface ItemStackFactory {
ItemStack createItemStack(Item item, int quantity);
}
ItemStackContainer :
public interface ItemStackContainer {
default void add(ItemStack stack) {
add(stack, 1);
}
void add(ItemStack stack, int quantity);
}
이제 Item
와 ItemStackFactory
나는 절대적으로 미래에 그것을 확장 할 필요가 일부 타사을 예견 할 수있다. ItemStackContainer
제공된 확장 구현 외부에서 예측할 수있는 방식으로는 향후 확장 될 수도 있습니다.
이제이 라이브러리를 최대한 강력하게 만들려고합니다. 이것은 아직 초기 단계 (pre-pre-alpha)에 있기 때문에 이것은 과도한 엔지니어링 (YAGNI) 행위 일 수 있습니다. 제네릭을 사용하기에 적절한 장소입니까?
public interface ItemStack<T extends Item> {
T getItem();
int getQuantity();
}
과
public interface ItemStackFactory<T extends ItemStack<I extends Item>> {
T createItemStack(I item, int quantity);
}
이것이 구현과 사용법을 읽고 이해하기가 더 어려워 질까 걱정됩니다. 가능하면 중첩 제네릭을 피하는 것이 좋습니다.