我有一些接口,希望将来由第三方实现,并且自己提供一个基本实现。我将仅使用几个示例。
目前,它们被定义为
项目:
public interface Item {
String getId();
String getName();
}
ItemStack:
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);
}
我担心这可能最终导致难以阅读和理解实现和用法。我认为,建议尽可能避免嵌套泛型。