【问题标题】:Wierd unchecked conversion warning奇怪的未经检查的转换警告
【发布时间】:2012-12-28 13:01:49
【问题描述】:

我在我的代码中使用了策略模式,这是一个简短的片段:

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);
            }
        };

我该如何解决这个问题?我试图改变很多,但我仍然收到警告。请帮忙!

【问题讨论】:

  • strategy 变量的类型是什么?

标签: java interface unchecked


【解决方案1】:

确保strategy 变量也具有泛型类型信息。

以下将导致此警告:

FindingStrategy strategy;

虽然这应该没问题:

FindingStrategy<SomeObject> strategy;

那时你甚至不需要演员表。

【讨论】:

  • 谢谢,就是这样!你们俩都帮助了我,但是由于您的回答是第一个,我想我应该给您“复选标记”。我喜欢 StackOverflow!
【解决方案2】:

我怀疑你的类定义应该是这样的

class BindingFindingSomething implements FindingStrategy<SomeObject>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    相关资源
    最近更新 更多