检查转换为将来的对象

问题描述 投票:2回答:5

我正在使用Future对象

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

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

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

如何检查此投射

谢谢

java casting future
5个回答
0
投票

看看界面

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

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

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

尝试深入研究解决方案的体系结构以避免不受限制的情况并重新考虑它,总有一些解决方案可以应用于创建更安全的代码。


0
投票

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


0
投票

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

点击此链接:How do I address unchecked cast warnings?

谢谢。


0
投票

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

public class MyClass implements Callable<object type returned>{

希望这可以帮助将来的某个人。


0
投票

如果您碰巧使用通过匿名内部类实例化的Callable,则此警告的另一个原因可能是Callable的声明是通用的。我不得不在声明的两边提到<T>

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

};

可能完全显而易见,但我花了一些时间才弄明白这一点。

© www.soinside.com 2019 - 2024. All rights reserved.