Eclipse 中的空注释处理器
Null annotation processor in Eclipse
我正在使用 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;
我收到的警告是:"The expression of type '@NonNull Class' needs unchecked conversion to conform to '@NonNull Class<@Nullable V>'"
我不明白为什么会收到警告。方法签名完全一样,为什么传递的值需要转换呢?为什么 type
在一种方法中推断为 @NonNull Class<V>
而在另一种方法中推断为 @NonNull Class<@Nullable V>
?
这是 bug in ecj 4.4。在类型推断和空推断的组合中,ecj 过度热切地将类型参数推断为 @Nullable V
.
错误已在 4.5M5, so the upcoming release 4.5 (Mars) 中修复,将按预期接受程序。
我正在使用 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;
我收到的警告是:"The expression of type '@NonNull Class' needs unchecked conversion to conform to '@NonNull Class<@Nullable V>'"
我不明白为什么会收到警告。方法签名完全一样,为什么传递的值需要转换呢?为什么 type
在一种方法中推断为 @NonNull Class<V>
而在另一种方法中推断为 @NonNull Class<@Nullable V>
?
这是 bug in ecj 4.4。在类型推断和空推断的组合中,ecj 过度热切地将类型参数推断为 @Nullable V
.
错误已在 4.5M5, so the upcoming release 4.5 (Mars) 中修复,将按预期接受程序。