在内部传递泛型类型 class
Passing generic types inner class
下面是例子:
import lombok.Builder;
import lombok.Getter;
import lombok.Singular;
import java.util.List;
@Getter
@Builder
public class GenericsType<T> {
@Singular("entry")
private List<Animal> list;
@Builder
private static class Animal<T> {
T test;
}
public void main(String args[]){
GenericsType.<String>builder()
.entry(Animal.<String>builder().test("my object").build())
.build();
}
}
有没有办法只传递一次通用 <String>
?实际上内部 class 应该已经知道它的类型了。
GenericsType.<String>builder()
.entry(Animal.builder().test("my object").build())
.build();
这是 Java 编译器的限制。虽然在这种情况下看起来很明显类型参数必须是 String
,但推断并不像看起来那么容易:
编译器必须通过 test("my object")
将类型信息从 build()
反向传播到 builder()
方法。
新的编译器版本可能支持这种推断,但至少 javac
11 不支持。
下面是例子:
import lombok.Builder;
import lombok.Getter;
import lombok.Singular;
import java.util.List;
@Getter
@Builder
public class GenericsType<T> {
@Singular("entry")
private List<Animal> list;
@Builder
private static class Animal<T> {
T test;
}
public void main(String args[]){
GenericsType.<String>builder()
.entry(Animal.<String>builder().test("my object").build())
.build();
}
}
有没有办法只传递一次通用 <String>
?实际上内部 class 应该已经知道它的类型了。
GenericsType.<String>builder()
.entry(Animal.builder().test("my object").build())
.build();
这是 Java 编译器的限制。虽然在这种情况下看起来很明显类型参数必须是 String
,但推断并不像看起来那么容易:
编译器必须通过 test("my object")
将类型信息从 build()
反向传播到 builder()
方法。
新的编译器版本可能支持这种推断,但至少 javac
11 不支持。