java - 将 null 转换为类型

标签 java casting

假设我们有一个方法:

  @Override
  public void run(Object v, NeoWaterfallI.AsyncCallback<V, E> cb) {
    this.handle(v, (err, results) -> {
      cb.done((E)err, (Map.Entry)results);
    });
  }

如果结果为空,我认为转换为 Map.Entry 将失败。那么处理这个问题的最好方法是这样吗?

  @Override
  public void run(Object v, NeoWaterfallI.AsyncCallback<V, E> cb) {
    this.handle(v, (err, results) -> {
      if(results != null){
        results = (Map.Entry)results;
      }
      cb.done((E)err, results);
    });
  }

或者有更好的方法吗?当我尝试使用 null 检查时,Java 不喜欢它,我看到了这一点:

enter image description here

最佳答案

这没有任何意义:

  if(results != null){
    results = (Map.Entry)results;
  }

唯一完成的事情是,如果 results 不是继承自 Map.Entry 的类,它将抛出异常。

我不知道 VEerrresults 是什么类型,但是这个可能更接近您想要的:

public void run(Object v, NeoWaterfallI.AsyncCallback<V, E> cb) {
    this.handle(v, (err, results) -> {
     cb.done((E)err, (Map.Entry<String,V>)results);
    });
  }

cb指定的回调处理第二个参数可能为空的可能性。

如果您需要测试非空Map.Entry,您可以这样做:

boolean isValidAndNotNull = (results instanceof Map.Entry);

关于java - 将 null 转换为类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55037854/

相关文章:

mysql - 需要将 SQL 列从 varchar(255) 转换为 bigint(20)

c++ - Vulkan API 调试函数指针类型转换错误

Java 自定义字体在 html jlabels 中不起作用

java - 父类(super class)中的实例变量有什么用,以及如何在子类中更改它们的值

java - 如何将值存储为迭代器中的变量,for 循环?

javascript - Typescript 动态属性输入

java - C++ (Visual Studio) 有 Java 风格的注释吗?

Java 递归三角形站在尖端

java - 从 Void 转换,将任何类型存储在 Map 中

JavaScript : casting int to char trouble