Fruitたとえば、次のように定義された単純なクラスがあります。
public class Fruit {
int price;
public boolean isEqualPrice(Fruit object) {
return (object.price == price);
}
}
現在、、Fruitなどのサブクラスがいくつかあります。これらのサブクラスが同じである場合にのみ、メソッドを有効にする必要があります。たとえば、は有効ですが、そうではありません。これを達成するためのパラメータをどのように定義する必要があります か?のすべてのサブクラスでオーバーライドしたくありません。AppleOrangeMangoisEqualPriceApple.isEqualPrice(Apple)Apple.isEqualPrice(Orange)isEqualPriceisEqualPriceFruit
考えられる解決策の1つは次のとおりです。
public boolean isEqualPrice(Fruit object) {
if(this.getClass() != object.getClass())
throw new IllegalArgumentException();
return (object.price == price);
}
ただし、クラスは実行時だけでなく同じであると報告され、ユーザーはメソッドのシグネチャを監視して正しいパラメータタイプを実現する方法がありません。コンパイル時にこれを検出する方法はありますか?
NOTE:compareToの方法enumはそういう方法だと思います。誰もenumがこの方法を持っていて、あるタイプはenum他のタイプと比較することができないからです。しかし、それがどのように実装されているのか理解できませんでした。