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