java 语是什么?super/extends byte[]有意义吗?

yiytaume  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(311)

我只是写了下面的方法。

static <R> R encodeBase16(final Supplier<? extends byte[]> supplier,
                          final Function<? super byte[], ? extends R> function) {
    requireNonNull(supplier, "supplier is null");
    requireNonNull(function, "function is null");
    return function.apply(encodeBase16(supplier.get()));
}

而编译器似乎没有问题。
是那些吗 ? extends byte[] 以及 ? super byte[] 零件有意义吗?或者我可以用 byte[] ?

static <R> R encodeBase16(final Supplier<byte[]> supplier,
                          final Function<byte[], ? extends R> function) {
    requireNonNull(supplier, "supplier is null");
    requireNonNull(function, "function is null");
    return function.apply(encodeBase16(supplier.get()));
}
ipakzgxi

ipakzgxi1#

这很好。您可以将任何引用类型放在 extends / super 在通配符范围内。请参见此处的生产规则:

TypeArguments:
  < TypeArgumentList >
TypeArgumentList:
  TypeArgument {, TypeArgument}
TypeArgument:
  ReferenceType 
  Wildcard
Wildcard:
  {Annotation} ? [WildcardBounds]
WildcardBounds:
  extends ReferenceType 
  super ReferenceType

如您所知,使用通配符允许 byte[] 用作 extends byte[] 通配符和 byte[] 用作 super byte[] 通配符。据我所知,没有 byte[] 唯一的超级类型 byte[] 是: Object Serializable Cloneable 根据这个。例如你可以通过 Function<Object, R> 对于该方法:

Function<Object, String> function = x -> null;
encodeBase16(() -> null, function);

这有用吗?我不这么说,但你可以做一些没用的事。
有关“多余”使用通配符的问题

相关问题