У мене є деякі інтерфейси, які я маю намір реалізувати сторонніми сторонами в майбутньому, і я сам забезпечую реалізацію бази. Я буду використовувати лише пару, щоб показати приклад.
В даний час вони визначаються як
Пункт:
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
також може бути продовжено в майбутньому, але не так, як я можу передбачити, поза моєю передбаченою реалізацією за замовчуванням.
Зараз я намагаюся зробити цю бібліотеку якомога міцнішою; це ще на ранніх стадіях (пре-пре-альфа), тому це може бути актом надмірної інженерії (ЯГНІ). Це підходяще місце для використання дженериків?
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);
}
Я побоююся, що це може призвести до ускладнення для читання та розуміння впроваджень та використання; Я думаю, що це рекомендація уникати гніздування дженериків, коли це можливо.