Java 类动态派生-访问者模式

Java 类动态派生-访问者模式,java,derived-class,visitor,Java,Derived Class,Visitor,我想以这种方式创建访问者模式 public interface Visitable<T>{ public void accept(T visitor); } public interface SomeBusinessService implements Visitable<SomeVisitor>{ public void mtd1(); public void mtd2(); } public abstract class SomeBusinessB

我想以这种方式创建访问者模式

public interface Visitable<T>{
   public void accept(T visitor);
}

public interface SomeBusinessService implements Visitable<SomeVisitor>{

  public void mtd1();
  public void mtd2();
}

public abstract class SomeBusinessBean1 implements SomeBusinessService {
   public void mtd1(){}
   public void mtd2(){}
} 

public abstract class SomeBusinessBean2 implements SomeBusinessService {
   ...
}
使用这种方法,我不必为所有需要的bean创建一个抽象类 实现访问者接口接受方法

此解决方案还可以用于我们希望根据每个类层次结构的服务工厂来获得特定方法的通用行为的情况

用标准jdk有没有办法做到这一点,或者我需要使用cglib之类的外部工具,或者我说的是废话,我们可以通过其他方式实现这一目标


如果您正在寻找从类对象创建类实例的方法,请查看java反射api

clazz.newInstanze();


如果您正在寻找一种从类对象创建类实例的方法,那么可以看看java反射api

clazz.newInstanze();


只是澄清一下:Visitor和Visitable是一样的,这是问题中的一个输入错误,或者你有两个不同的接口吗?通常Visitor代表可以访问Visitable类的东西。对不起,我的坏消息实现了Visitable。Visitor类将只有带有适当类作为输入参数的visit方法,这不是注释的目的吗?由于我不完全理解,您希望如何通过注释来解决这个问题。我想要的是类层次结构中几个方法的共同行为,这取决于工厂方法。例如,如果我创建另一个工厂实现,它可以以其他方式实现抽象方法。因此,它将符合开闭原则。我想避免if-else驱动的开发。只是为了澄清一下:Visitor和Visitable是一样的,这是问题中的一个错误,或者你有两个不同的接口吗?通常Visitor代表可以访问Visitable类的东西。对不起,我的坏消息实现了Visitable。Visitor类将只有带有适当类作为输入参数的visit方法,这不是注释的目的吗?由于我不完全理解,您希望如何通过注释来解决这个问题。我想要的是类层次结构中几个方法的共同行为,这取决于工厂方法。例如,如果我创建另一个工厂实现,它可以以其他方式实现抽象方法。因此,它将符合开闭原则。我想避免if-else驱动的开发。我不能这样做,因为我的派生是抽象类,这是我想动态创建匿名类的要点,但我想确定应该在运行时而不是编译时扩展哪个类。@Marcin Michalski这个匿名类应该做什么?在这个特定的领域case匿名类是可访问的实现,没有实现不必要的类方法accept。我希望实现与EJB2.x实体bean类似的功能,在EJB2.x实体bean中,实体bean的属性是抽象的getter/setter,容器负责在部署期间扩展实体bean类。我已经开始阅读有关ASM库的内容,也许这会帮助我整理它。因此,我最终可能会得到一种机制,可以在运行时确定一组类层次结构的常见行为。我不能这样做,因为我的派生是抽象类,这正是我想要动态创建匿名类的地方,但我想确定应该在运行时而不是编译中扩展哪个类时间。@Marcin Michalski这个匿名类应该做什么?在这种特定情况下,匿名类是可访问的实现,没有实现不必要的类方法accept。我希望实现与EJB2.x实体bean类似的功能,在EJB2.x实体bean中,实体bean的属性是抽象的getter/setter,容器负责在部署期间扩展实体bean类。我已经开始阅读有关ASM库的内容,也许这会帮助我整理它。因此,我最终可以得到一种机制,该机制可以在运行时确定一组类层次结构的公共行为
clazz.newInstanze();
clazz.getConstructors(...).newInstance(...);