2012-12-28 76 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>