使用通配符转换常量泛型
Cast constant generic with wildcard
我正在执行静态 util 方法,returns 完成了带有空可选的未来:
public class CompletableFutureUtils {
private static final CompletableFuture<Optional<?>> EMPTY_FUT = completedFuture(Optional.empty());
private static final Optional<?> EMPTY_OPT = Optional.empty();
@Nonnull
@SuppressWarnings("unchecked")
public static <T> CompletableFuture<Optional<T>> emptyOptionalCompletedFuture() {
// COMPILE ERROR: incompatible types: CompletableFuture<Optional<?>> cannot be converted to CompletableFuture<Optional<T>>
// return (CompletableFuture<Optional<T>>)EMPTY_FUT;
return completedFuture((Optional<T>)EMPTY_OPT); // works, but creates new instance every time
}
}
为了效率我想return完成CompletableFuture
-EMPTY_FUT的同一个常量实例,但是不能由于无限通配符,将其转换为 CompletableFuture<Optional<T>>
。
当然,我想为任何类型调用这个已完成的未来方法,与 Optional.empty() and CompletableFuture.completedFuture(U)
几乎相同
如何将具有无限通配符的泛型转换为特定类型?有可能吗?
首先放弃 CompleteableFuture
的类型,然后再次转换为您想要的类型,如下所示:
return (CompletableFuture<Optional<T>>) (CompletableFuture<?>) EMPTY_FUT;
我正在执行静态 util 方法,returns 完成了带有空可选的未来:
public class CompletableFutureUtils {
private static final CompletableFuture<Optional<?>> EMPTY_FUT = completedFuture(Optional.empty());
private static final Optional<?> EMPTY_OPT = Optional.empty();
@Nonnull
@SuppressWarnings("unchecked")
public static <T> CompletableFuture<Optional<T>> emptyOptionalCompletedFuture() {
// COMPILE ERROR: incompatible types: CompletableFuture<Optional<?>> cannot be converted to CompletableFuture<Optional<T>>
// return (CompletableFuture<Optional<T>>)EMPTY_FUT;
return completedFuture((Optional<T>)EMPTY_OPT); // works, but creates new instance every time
}
}
为了效率我想return完成CompletableFuture
-EMPTY_FUT的同一个常量实例,但是不能由于无限通配符,将其转换为 CompletableFuture<Optional<T>>
。
当然,我想为任何类型调用这个已完成的未来方法,与 Optional.empty() and CompletableFuture.completedFuture(U)
几乎相同如何将具有无限通配符的泛型转换为特定类型?有可能吗?
首先放弃 CompleteableFuture
的类型,然后再次转换为您想要的类型,如下所示:
return (CompletableFuture<Optional<T>>) (CompletableFuture<?>) EMPTY_FUT;