避免在未定义 class 的情况下实例化泛型

Avoid instantiate Generics without defining the class

我已经 class 定义了

@Data
@AllArgsConstructor
@EqualsAndHashCode(of = { "id" })
@Builder(toBuilder=true)
@Wither
@JsonInclude(NON_NULL)
public class Hostel<T> {
}

我想知道是否可以在不像这样定义 class 的情况下避免实例化

new Hostel<>();

并且始终强制实例化为:

new Hostel<GuestAndHouse>();

您不能禁止这种语法变体。例如这个

Hostel<GuestAndHouse> h = new Hostel<>();

只是一个简化的语法:

Hostel<GuestAndHouse> h = new Hostel<GuestAndHouse>();

但这是一回事。这里仍然定义了类型变量T。编译器可以从上下文推断出类型,所以你不需要写下来。

这与像这样的原始类型不同:

Hostel h = new Hostel();

这里的类型变量还没有被赋予真正的类型。应该避免这种情况,但是 Java 编译器允许它向后兼容 java 中出现泛型之前编写的代码(泛型已在 1.5 中引入)。