サードパーティが将来実装する予定のインターフェイスがいくつかあり、自分で基本実装を提供します。例を示すためにカップルを使用するだけです。
現在、それらは次のように定義されています
項目:
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
将来的に拡張することもできますが、提供されているデフォルトの実装以外では、予測できる方法では拡張できません。
今、私はこのライブラリを可能な限り堅牢にしようとしています。これはまだ初期段階(プレプレアルファ)であるため、これは過剰エンジニアリング(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);
}
これにより、実装や使用法が読みにくくなり、理解しにくくなるのではないかと心配しています。ジェネリックのネストは可能な限り避けることをお勧めします。