有四个类:A
,B
,C
和A1
扩展class A
。我必须将A1的字段类型限制为仅B或C的实例。
我的意思是A的任何子类都可以有B
或C
类型的任意数量的字段,但不能包含任何其他类型的字段。例如,这里有三个类:
public class A1 extends A{
B b1;
B b2;
C c1;
}
public class A2 extends A{
B b1;
}
public class A3 extends A{
B b1;
B b2;
sometype s;
}
因此A1和A2有效,A3不是。
我怎么能这样做?
答案 0 :(得分:1)
您不能*限制子类创建的任何**字段,只需继承父类。
从Oracle JavaTM Tutorials - Inheritance开始写道:
您可以在子类中执行的操作
- 您可以在子类中声明一个与超类中的字段同名的字段,从而将其隐藏(不推荐)。
- 您可以在子类中声明不在超类中的新字段。
相反,这是设计模式不正确的标志。考虑创建Builder
A
,然后通过构建来限制A
的创建:
new A.Builder().add(b)...
- *但是,您可以在父类中创建一个初始化程序,用于检查该类的所有当前字段。减去父类的字段,其余是子类型的字段。通过抛出 ExceptionInInitializerError
,您实际上会使操作无效。不幸的是,您只能通过反射检查可见字段
- **但是,您可以编写一个自定义ClassLoader
,它只通过对对象进行检查并决定在适当时不加载它们来加载被认为有效的类。这是一个冗长的主题,并不是一个可行的方法。