いくつか読んだ後、 & 演算子を使用して複数の拡張を要求できるようです。Class<T extends Class1 & Class2> classObj;
ただし、コンパイル時に「not」機能を強制する方法を探しています。バナナがフルーツを拡張する例があります。ただし、次のようなものを求めています。
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>
有効な構文ではありません。コンパイル時にこの種の型階層を適用するには、どのようなアプローチをお勧めしますか?