如何指定无界通配符类型参数?
How can I specify an unbounded wildcard type parameter?
我无法为问题选择正确的词。
我有一个 class 和一个工厂方法。
class MyObject<Some, Other> {
static <T extends MyObject<U, V>, U, V> T of(
Class<? extends T> clazz, U some, V other) {
// irrelevant
}
private Some some;
private Other other;
}
现在我想再添加两个工厂方法,每个只需要 U
或 V
。
应该是这样的。这意味着省略的 V
或 U
仍未设置 (null
).
static <T extends MyObject<U, ?>, U> T ofSome(
Class<? extends T> clazz, U some) {
// TODO invoke of(clazz, some, @@?);
}
static <T extends MyObject<?, V>, V> T ofOther(
Class<? extends T> clazz, V other) {
// TODO invoke of(clazz, @@?, other);
}
我试过了,但没有成功。
static <T extends MyObject<U, ?>, U> T ofSome(
final Class<? extends T> clazz, final U some) {
return of(clazz, some, null);
}
编译器抱怨以下消息。
no suitable method found for of(java.lang.Class,U, <nulltype>)
正确的做法是什么?
您仍然需要通用参数 V
,只是不需要方法参数 V
。
static <T extends MyObject<U, V>, U, V> T ofSome(
final Class<? extends T> clazz, final U some) {
return of(clazz, some, null);
}
您需要 ofSome
中的 V
以便编译器可以通过查看 clazz
的类型推断 of
的 V
类型。
我无法为问题选择正确的词。
我有一个 class 和一个工厂方法。
class MyObject<Some, Other> {
static <T extends MyObject<U, V>, U, V> T of(
Class<? extends T> clazz, U some, V other) {
// irrelevant
}
private Some some;
private Other other;
}
现在我想再添加两个工厂方法,每个只需要 U
或 V
。
应该是这样的。这意味着省略的 V
或 U
仍未设置 (null
).
static <T extends MyObject<U, ?>, U> T ofSome(
Class<? extends T> clazz, U some) {
// TODO invoke of(clazz, some, @@?);
}
static <T extends MyObject<?, V>, V> T ofOther(
Class<? extends T> clazz, V other) {
// TODO invoke of(clazz, @@?, other);
}
我试过了,但没有成功。
static <T extends MyObject<U, ?>, U> T ofSome(
final Class<? extends T> clazz, final U some) {
return of(clazz, some, null);
}
编译器抱怨以下消息。
no suitable method found for of(java.lang.Class,U, <nulltype>)
正确的做法是什么?
您仍然需要通用参数 V
,只是不需要方法参数 V
。
static <T extends MyObject<U, V>, U, V> T ofSome(
final Class<? extends T> clazz, final U some) {
return of(clazz, some, null);
}
您需要 ofSome
中的 V
以便编译器可以通过查看 clazz
的类型推断 of
的 V
类型。