首页 > 解决方案 > 避免在不定义类的情况下实例化泛型

问题描述

我定义了这个类

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

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

new Hostel<>();

并始终强制实例化,例如:

new Hostel<GuestAndHouse>();

标签: javalombok

解决方案


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

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

只是一个简化的语法:

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

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

它不是像这样的原始类型:

Hostel h = new Hostel();

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


推荐阅读