我只是写了下面的方法。
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()));
}
1条答案
按热度按时间ipakzgxi1#
这很好。您可以将任何引用类型放在
extends
/super
在通配符范围内。请参见此处的生产规则:如您所知,使用通配符允许
byte[]
用作extends byte[]
通配符和byte[]
用作super byte[]
通配符。据我所知,没有byte[]
唯一的超级类型byte[]
是:Object
SerializableCloneable
根据这个。例如你可以通过Function<Object, R>
对于该方法:这有用吗?我不这么说,但你可以做一些没用的事。
有关“多余”使用通配符的问题