避免在未定义 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 中引入)。
我已经 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 中引入)。