Eclipse中的空注释处理器

时间:2015-04-23 11:03:05

标签: java eclipse null annotations

我正在使用Eclipse JDT Null注释处理器,并且在使用java.lang.Class时我得到了一些奇怪的行为。

package test;

import org.eclipse.jdt.annotation.Nullable;

public class AnnotationSpul {

    @Nullable
    public <V> V get1(Class<V> type) {
        return get2(type); //This line has a warning
    }

    @Nullable
    public <V> V get2(Class<V> type) {
        return null;
    }
}

这是我的包裹信息:

@NonNullByDefault({ PARAMETER, RETURN_TYPE, FIELD })
package test;

import static org.eclipse.jdt.annotation.DefaultLocation.FIELD;
import static org.eclipse.jdt.annotation.DefaultLocation.PARAMETER;
import static org.eclipse.jdt.annotation.DefaultLocation.RETURN_TYPE;

import org.eclipse.jdt.annotation.NonNullByDefault;

我得到的警告是:&#34;类型&#39; @NonNull Class&#39;需要未经检查的转换以符合&#39; @NonNull类&lt; @Nullable V&gt;&#39;&#34;&#34;

我不明白为什么会收到警告。方法签名完全相同,那么为什么传递的值需要转换?为什么type在一种方法中被推断为@NonNull Class<V>而在另一种方法中被推断为@NonNull Class<@Nullable V>

1 个答案:

答案 0 :(得分:2)

这是bug in ecj 4.4。在类型推断和空推理的组合中,ecj过度地将类型参数推断为@Nullable V

该错误已在4.5M5中修复,因此即将到来的release 4.5 (Mars)将按预期接受该计划。