将null强制转换为类型

时间:2019-03-07 07:01:48

标签: 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);
    });
  }

如果结果为null,则假定转换为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

1 个答案:

答案 0 :(得分:3)

这没有道理:

  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指定的回调处理第二个参数可以为null的可能性。

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

boolean isValidAndNotNull = (results instanceof Map.Entry);