Ниже не будет компилировать, но я хочу, чтобы создать что-то подобной функциональности, который компилируется:Как передать несколько параметров универсального при расширении обобщенного класса
public class FreezerTest
{
interface Edible{}
interface SmallerThanABeachball{}
interface Freezeable{}
abstract class BoxedItem
{}
class Marbles extends BoxedItem
{}
class IceCream extends BoxedItem implements Freezeable, SmallerThanABeachball, Edible
{}
class MyBrother
{}
class Banana implements Edible, SmallerThanABeachball
{}
class Cat implements SmallerThanABeachball
{}
abstract class StorageChest<T>{
public void add(T toStore){}
}
class MiniFoodFreezer extends StoreageChest<Freezeable & Edible & SmallerThanABeachball>{
}
public FreezerTest(){
MiniFoodFreezer freezer = new MiniFoodFreezer();
freezer.add(new Cat());//DESIRE COMPILE ERROR
freezer.add(new IceCream());//DESIRE OK
freezer.add(new MyBrother());///DESIRE COMPILE ERROR
freezer.add(new Banana());//DESIRE COMPILER ERROR
freezer.add(new Marbles());//DESIRE COMPILER ERROR
}
}//end
Одна мысль была создать всеобъемлющий интерфейс и затем передать, что:
interface WillFitInMiniFoodFreezer extends Edible, SmallerThanABeachball, Freezeable{}
class MiniFoodFreezer extends StorageChest<WillFitInMiniFoodFreezer>{
}
... Но что, если съедобные, SmallerThanABeachball и Freezeable все из библиотеки 3-й партии и других сторонних библиотек относятся к этим типам, некоторые из которых имеют реализации интерфейса необходим знакомься критерии f или WillFitInMiniFoodFreezer, но явно не реализует WillFitInMiniFoodFreezer?
Боюсь, вам придется сделать это во время выполнения проверить или создать класс адаптера, который обертывает IceCream и реализует WillFitInMiniFoodFreezer. –