检查转换为将来的对象

时间:2014-05-06 07:10:23

标签: java casting future

我正在使用Future对象

Future<String> res = (Future<String>) result;

结果类型为Object。 但是我得到了这个警告

Type safety: Unchecked cast from Object to Future<String>

如何查看此投射

由于

5 个答案:

答案 0 :(得分:0)

查看界面

public interface Future<V> {//...}

因此,当您使用返回未来的方法时,您可以简单地放置参数以确定它返回的内容(它可能也是某种抽象)。尝试考虑如何改进代码,使您检查返回对象的实例或创建一些可以应用于您的未来的界面,以便更安全。

public interface SomeInterface{//...}
public Future<SomeInterface> yourMethod(){};

尝试更深入地了解解决方案的架构以避免未经检查的情况并重新考虑它,总有一些解决方案可用于创建更安全的代码。

答案 1 :(得分:0)

您不能 - 除非您可以将result的来源更改为相应的类型。但是,否则,您的编译器无法确定result具有哪种类型,因此强制转换必须是不安全的。您可以通过@SuppressWarnings("unchecked")禁用编译器警告,但表示您知道不安全的演员。

答案 2 :(得分:0)

您可以使用@SuppressWarnings(“未选中”)删除它,但不显示警告但这不是一个好习惯,因为您将获得 ClassCastException 运行时,因为泛型不能阻止这种情况发生。在添加@SuppressWarnings之前,您必须确定要投射相同的对象。

浏览此链接:How do I address unchecked cast warnings?

感谢。

答案 3 :(得分:0)

我意识到这是一个旧线程,但我可以跨越它寻找同一问题的解决方案。我的解决方案是指定我在类声明中返回的对象类型。

public class MyClass implements Callable<object type returned>{

希望这有助于将来。

答案 4 :(得分:0)

如果您正巧使用通过匿名内部类实例化的Callable,则出现此警告的另一个原因可能是Callable的声明是通用的。我必须在声明的双方两边都引用<T>

Callable<Boolean> callable = new Callable<Boolean>() {
        ^^^^^^^^^
    @Override
    public Boolean call() throws Exception {
       ...
   }

};

可能是完全显而易见的,但花了我一些时间才能弄清楚。