3

私の考えは、メソッドを持つバリデーターインターフェースがあるということですgetRealValue()。戻り値はフィールドによってString異なりIntegerますLong

私の可能性は次のとおりです。

  1. Objectこのメソッドを呼び出すたびに、戻り値の型を代入し、キャストを使用できます。(RuntimeError間違ったキャストが発生した場合)。

  2. バリデーターをインスタンス化するときに、汎用の戻り値の型をバリデーターに使用できます (また、キャストを使用する必要がありますが、メソッド内getRealValueで一度だけ使用する必要があります)。それでもRuntimeError、戻り値の型を渡すのを忘れたり、間違った型を渡したりする場合。

戻り値の型をバリデータ内に保存して使用する方法があれば?

4

1 に答える 1

10

最初のポイントについてClassCastExceptionは、不適切なキャストの場合に実行時に a を取得する方法はありません。

2 番目のケースでは、キャストする必要はありません。次の例を参照してください。

public interface Foo<T> {
    public T getValue(); 
}

...それから別の場所:

public class Blah<T> implements Foo<T> {
    @Override
    public T getValue() {
        // TODO write the code
        // note that because of type erasure you won't know what type T is here
        return null;
    }
}

...次に、別の場所:

Blah blah1 = new Blah<String>();
String s = blah1.getValue();
Blah blah2 = new Blah<Long>();
// etc.

最後に、参考文献をいくつか示します。

于 2013-10-18T05:56:21.943 に答える