このパターンは多くの場所で見てきましたが、名前が付けられているのを見たことがありません。
さまざまな人がさまざまな命名パターンを使用しているように見えるため、それを実装するメソッドに名前を付ける方法についての提案を求めています。
申し訳ありませんが、例としてライブラリを思い出すことはできませんが、回答の一部としてライブラリを使用する場合は、名前を付けてください。
public class Produce{
package private Produce(){};
Fruit isFruit(){
return null;
}
Veg isVeg(){
return null;
}
}
public class Veg extends Produce {
package private Veg(){};
Veg isVeg(){
return this;
}
}
public class Fruit extends Produce {
package private Fruit(){};
Fruit isFruit(){
return this;
}
}
追加
@LouisWasserman
まず、ctor パッケージを非公開にすることで、Produce のサブタイプの数が制限されます。2 つの isXXX メソッドを含めることで、サブクラスが 2 つしかないという事実を示しています。これは、instanceof チェックを行うよりも優れています。たぶん私だけかもしれませんが、このアプローチは、他のコードや上記にキャストがないことも意味します。これは良いことですよね?
また、Veg を Fruit にキャストしようとしたときに操作 isFruit() が失敗したことを示すために null を返すのと同じように、検索またはクエリが失敗したときにメソッドから空のリストを返していませんか?
私が信じているEclipse JDTのクローンであるJTypeのGWTで簡単な例を見つけました。とにかく、その起源は問題ではありませんが、ここには、私が説明していることを正確に行う2つの非常によく知られている製品があります...
null をキャストまたは返すことを試みる isXXX は他にもたくさんあります。以下にいくつか貼り付けます。
/**
* Returns this instance as a {@link JAnnotationType} if it is an annotation
* or <code>null</code> if it is not.
*/
JAnnotationType isAnnotation();
JArrayType isArray();
JClassType isClass();
JClassType isClassOrInterface();
/**
* Returns this instance if it is an enumeration or <code>null</code> if it is
* not.
*/
JEnumType isEnum();
JGenericType isGenericType();