2012-12-28 93 views
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); 
      } 
     }; 

我該如何解決這個問題?我試圖改變很多,但我仍然收到警告。請幫忙!

+0

什麼是'strategy'變量的類型? –

回答

4

確保strategy變量也具有泛型類型信息。

以下原因會導致這樣的警告:

FindingStrategy strategy; 

,而這應該是罰款:

FindingStrategy<SomeObject> strategy; 

你應該甚至不需要投那麼。

+0

謝謝,就是這樣!你們都幫助過我,但是因爲你的回答是第一次,我想我應該給你「複選標記」。我愛StackOverflow! – Raidmaster

4

我懷疑你的類定義應閱讀

class BindingFindingSomething implements FindingStrategy<SomeObject>