在内部传递泛型类型 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 不支持。