gpt4 book ai didi

java - 通用参数上的非空注释如何传播到其使用?

转载 作者:太空宇宙 更新时间:2023-11-04 09:12:33 25 4
gpt4 key购买 nike

我正在尝试使用 @NonNull 注释泛型类的类型参数使用s:

interface Func<@NonNull U, @NonNull V> {
V apply(U u);
}

public class SomeClass<@NonNull T> {

// 1.
public static <T> SomeClass<T> factory();

// 2.
public SomeClass<T> method(SomeClass<? extends T> other);

// 3.
public <R> SomeClass<R> transform(Func<T, R> f);
}

有 3 种情况我不确定:

  1. SomeClass<T> 是吗?在静态方法中获取@NonNull从声明中还是我必须指定 <@NonNull T>又来了?

  2. 我必须指定 SomeClass<@NonNull ? extends T>由于协变的使用?

  3. 我必须指定 <@NonNull R>这里还是SomeClass<R>Func<T, R>的声明注释会传播吗?我是否必须注释为 Func<@NonNull T, @NonNull R>又来了?

这些类也应该从 Kotlin 中使用,Kotlin 的类型系统中包含非 null 值。除了给定的示例之外,Kotlin 是否需要声明更多注释,例如案例 1..3?

最佳答案

  1. 不存在 SomeClass<@Nullable Integer> 这样的类型,但是SomeClass<@NonNull Integer>SomeClass<@NonNull String> 。您不必向 factory() 的声明添加任何约束.

  2. T是非空的,它的任何子类型也是非空的。你不需要多余的@NonNull .

  3. transform()只能用 R 实例化非空,因此您无需将声明更改为 <@NonNull R> ,但这样做并没有什么害处。

关于java - 通用参数上的非空注释如何传播到其使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59502408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com