Java 对应类型树
我想知道是否有一些聪明的方法可以在Java中创建2个并行类型层次结构。例如,我有一些Java 对应类型树,java,inheritance,types,Java,Inheritance,Types,我想知道是否有一些聪明的方法可以在Java中创建2个并行类型层次结构。例如,我有一些XTypeXType有自己的类型树(大约10-20个,有些是平面的,有些是三层的) 现在我有一些情况,我想有一个相应的层次结构,但有一些额外的属性。因此,XTypeWithProperty,AXTypeWithProperty 现在,由于只有单一继承,因此AAXTypeWithProperty不可能有父级AXTypeWithProperty和AAXType。。。当然,我可以使用根目录下的XType将所有内容折叠到
XType
XType
有自己的类型树(大约10-20个,有些是平面的,有些是三层的)
现在我有一些情况,我想有一个相应的层次结构,但有一些额外的属性。因此,XTypeWithProperty
,AXTypeWithProperty
现在,由于只有单一继承,因此AAXTypeWithProperty
不可能有父级AXTypeWithProperty
和AAXType
。。。当然,我可以使用根目录下的XType
将所有内容折叠到第一棵树,并添加一个.getProperty()
方法,该方法可以为没有它的类型返回null
但是我想在这里找到一个类型安全的(Java可以管理的)解决方案。我考虑过创建泛型类型XType
和XType
并使用它们进行操作。。。但看起来维护起来有点乏味
有更好的方法吗?您可能会对的感兴趣,它可能会帮助您解决问题。EclipseIDE在内部使用它来维护Java模型树和资源模型树,然后在这两棵树之间调整元素。或者,您可以使用或查看注射。恐怕您需要在此处使用委派。例如:
public class WithProperty<T extends XType,P> {
private T object;
private P property;
public WithProperty(T obj) {
this.object = obj;
}
public T getObject() {
return object;
}
public P getProperty() {
return property;
}
public void setProperty(P property) {
this.property = property;
}
}
带有属性的公共类{
私人T对象;
私有财产;
公共财产(T obj){
this.object=obj;
}
公共T getObject(){
返回对象;
}
公共P getProperty(){
归还财产;
}
公共无效集合属性(P属性){
this.property=属性;
}
}
基本上,你所说的是课堂上的混合
在纯Java中,混入是不可能的,标准的Java解决方案是使用策略或适配器模式(参见其他答案)
或者您可以使用AspectJ生成“真实”的混合
现在,
com.yourpackage
中的所有类都实现了Foo
并共享相同的默认行为。要清楚,typeAXType
和AXTypeWithProperty
之间的唯一区别是存在一个额外的getter和setter?回答得很好。省得我打字了
public class WithProperty<T extends XType,P> {
private T object;
private P property;
public WithProperty(T obj) {
this.object = obj;
}
public T getObject() {
return object;
}
public P getProperty() {
return property;
}
public void setProperty(P property) {
this.property = property;
}
}
public interface Foo{
void isItTrue();
}
public aspect MixinAspect{
interface FooMixin extends Foo{}
public void FooMixin.isItTrue(){
System.out.println("Yup, I'm a mixin");
}
declare parents: com.yourpackage..* implements Mixin;
}