java - 静态方法的限制和newInstance()内省 - 任何解决方法?

时间:2015-11-30 01:19:29

标签: java inheritance reflection static

所以,我正在为我们的一些java spring后端开发一个自定义日志/审计模块。

此模块用于触发保存到数据库的各种自定义事件,以便以后检索/报告。

  • “User2注册”
  • “User5购买了productX”
  • “MoonLanding发生在UserN,UserB”

真的是各种各样的事件。每个事件都有一个event_type和一个event_category以及各种不同的参数。

EventBuilder类有一个很大的层次结构,它允许构建最终在完全相同的数据库表中的所有自定义事件(使用一个单独的关联JPA实体)。 每个EventBuilder都有一个不同的构造函数,它采用与我们正在尝试构建的“自定义事件记录”相关的不同参数。

现在问题如下: 所有EventBuilder都有以下两个方法:getEventType()和getEventCategory(),它们是一些元静态方法,但不是这样声明的。它们未被声明为静态的唯一原因是,一些内省/反射代码可以找到所有EventBuilder类,使用newInstance()实例化它们,假设这两个方法将在那里(作为接口的一部分始终实现)并构建一个所有可能的event_types,event_categories以及它们如何相互关联的列表。

这个问题是需要那些EventBuilder类具有默认构造函数,以便可以查询这两个方法并检索信息而无需使用这些对象的真实自定义构造函数。它工作但它引入了EventBuilder实例未正确初始化的可能性。

似乎有两个可用选项存在严重缺陷:

  • 错误的默认构造函数的当前解决方案(以便所有这些类都可以通用方式实例化)和2个未声明为静态的静态方法(以便可以在类层次结构中重写它们)
  • 使2个方法保持静态但现在它们不能成为java接口的一部分,它们不能在类层次结构中被覆盖,内省/反射代码不能假设它们会在那里等等。

有没有人有更好的第三个想法?非常感谢!

0 个答案:

没有答案