Java Eclipse空类型安全性在返回值上出错

Java Eclipse空类型安全性在返回值上出错,java,eclipse,eclipse-jdt,non-nullable,Java,Eclipse,Eclipse Jdt,Non Nullable,Eclipse似乎做了错误的分析,方法test1是正确的,但方法test2给出了错误: 空类型安全:类型字符串的表达式需要未经检查的转换才能符合@NonNull public class TestCase { public Object o; @NonNull public Object test1() { Object local = new Object(); return local; } @NonNull public Object

Eclipse似乎做了错误的分析,方法test1是正确的,但方法test2给出了错误:

空类型安全:类型字符串的表达式需要未经检查的转换才能符合@NonNull

public class TestCase {
   public Object o;

  @NonNull
  public Object test1()  {
      Object local = new Object();
      return local;
  }

  @NonNull
  public Object test2()  {
      o = new Object();
      return o;
  }    
}

我怀疑问题在于您返回的值可能已被其他线程更改。基本上,该方法可以返回空引用。您可以通过使用临时变量来避免这种情况:

@NonNull
public Object test2()  {
    Object tmp = new Object();
    o = tmp;
    return tmp;
}    

在Eclipse4.3中,您现在可以对类成员使用
@NonNull
,因此您可以说

   @NonNull
   public Object o;

这将停止警告-但您最好确保成员已实际初始化

它真的说“字符串类型的表达式”?嗯,那么任何延迟初始化都会给出警告?在这种模式下,您需要始终使用局部变量。@user2735261:我不明白延迟初始化的使用与局部变量的使用有什么关系。