【发布时间】:2013-12-21 07:23:51
【问题描述】:
以下内容无法编译,但我希望创建可以编译的类似功能:
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>{
}
...但是,如果 Edible、SmallerThanABeachball 和 Freezeable 都来自第三方库,而其他第三方库引用这些类型,其中一些具有满足 WillFitInMiniFoodFreezer 标准所需的接口实现但没有明确实施 WillFitInMiniFoodFreezer?
【问题讨论】:
-
恐怕您必须对其进行运行时检查,或者创建一个包装 IceCream 并实现 WillFitInMiniFoodFreezer 的适配器类。