0

私は自分のコードで戦略パターンを使用しました。ここに短い断片があります:

public interface FindingStrategy<T> {
    Callable<T> setAction();
}

class FindSomething implements BindingActionStrategy {

...

    @Override
    public Callable<SomeObject> setAction() {
        return new Callable<SomeObject>() {
            @Override
            public SomeObject call() throws ... {
                return (SomeObject)binding.findSomething(somethingsId);
            }
        };
    }

...

}

他のどこかで私は:

 Callable<SomeObject> ts = (Callable<SomeObject>) strategy.setAction();

そしてコンパイラシグナル:

unchecked conversion warning 
required: Callable<SomeObject>
found:    Callable

奇妙なことに、これを行うと、警告は表示されません。

Callable<SomeObject> ts = new Callable<SomeObject>() {
            @Override
            public SomeObject call() throws ... {
                return (SomeObject)binding.findSomething(somethingsId);
            }
        };

これを修正するにはどうすればよいですか? 多くの変更を試みましたが、それでも警告が表示されます。助けてください!

4

2 に答える 2

4

strategy変数にジェネリック型情報も含まれていることを確認してください。

次の場合、この警告が発生します。

FindingStrategy strategy;

これは問題ないはずですが:

FindingStrategy<SomeObject> strategy;

その場合、キャストさえ必要ないはずです。

于 2012-12-28T13:04:50.680 に答える
4

あなたのクラス定義は読むべきだと思います

class BindingFindingSomething implements FindingStrategy<SomeObject>
于 2012-12-28T13:07:01.103 に答える