[英]Java: not operator for wildcard bounds
阅读后,似乎可以使用&运算符进行多个扩展: Class<T extends Class1 & Class2> classObj;
但是,我正在寻找一种在编译时强制执行“非”功能的方法。 我有香蕉延伸水果的例子。 但是,我遵循以下原则:
public abstract class Fruit
{
public abstract String getFlavour();
}
public class Lemon extends Fruit
{
@Override
public String getFlavour()
{
return "sour";
}
}
public abstract class Banana extends Fruit
{
@Override
public String getFlavour()
{
return "very sweet!";
}
public abstract String getBananaRipeness();
}
public class UnripeBanana extends Banana
{
@Override
public String getBananaRipeness()
{
return "unripe";
}
}
...
public String methodThatTakesFruitClassButNotBanana( Class<? extends Fruit ! Banana> fruitClass )
{
Fruit fruit = fruitClass.newInstance();
return fruit.getFlavour();
}
...
methodThatTakesFruitClassButNotBanana( Lemon.class ); // I want this to compile.
methodThatTakesFruitClassButNotBanana( UnripeBanana.class ); // I want this not to compile.
显然是Class<? extends Fruit ! Banana>
Class<? extends Fruit ! Banana>
Class<? extends Fruit ! Banana>
是无效的语法。 您建议采用什么方法在编译时强制这种类型层次结构?
公共String方法ThatTakesFruitClassButNotBanana
这与Liskov替代原理以及多态性的工作原理完全相反。 由于Banana extends Fruit
因此要求采用Fruit
任何方法都必须接受Banana
。
如果必须,您需要检查动态类型并引发异常,编译器将无法为您执行此操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.