微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我们可以使用泛型来仅允许特定类型而不是任何类型吗 ?

如何解决我们可以使用泛型来仅允许特定类型而不是任何类型吗 ?

将构造函数设为私有:

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 举报,一经查实,本站将立刻删除。