如何解决我们可以使用泛型来仅允许特定类型而不是任何类型吗 ?
将构造函数设为私有:
private C(T param){
然后提供静态工厂方法来创建特定类型的实例:
public static <T extends A> C<T> create(T param) {
return new C<>(param);
}
public static <T extends B> C<T> create(T param) {
return new C<>(param);
}
这不会阻止您使用 类型 C<SomeOtherType>
; 您只是无法创建它的实例。
解决方法
假设我有三个隔离的公共类(没有IS-A关系)A,B和C。我想在C中定义一个字段,使其类型可以是A或B。
目前,我通过定义C来实现这一目标:
class A{} class B{}
public class C<T> {
private T obj;
public C(T param){
if ( !(param instanceof A)
|| !(param instanceof B) ) {
throw new InvalidParameterException("Only types A and B are allowed!");
}
this.obj = param;
}
}
上面的代码仅在运行时会引发异常。但是,我更希望在使用A或B以外的任何类型构造C的情况下,在编译时本身抛出错误,以生成编译器错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。