Apache Wicket,Hibernate Criteria API和其他java库使用属性名作为字符串来访问模型数据。例如:
new PropertyModel(address, "street");
这定义了一个模型,它支持通过调用address.getStreet()方法从地址对象中读取“street”属性。
一个问题是这样的字符串文字是不方便的,并且在诸如Java的静态类型语言中看起来不自然。您可以在属性名称中输入拼写错误,例如“stret”,你只会注意到这行代码会执行。其他不便之处在于自动重构会破坏您的代码,因为此字符串文字“street”与代码中表示的Address类的street属性之间没有直接链接。
解决此问题的一种方法是在模型类中使用常量:
class Address {
public static final String P_STREET = "street";
...
所有属性名称都在一个地方。通过检查生成的.class文件或在应用程序启动时使用reflection api,还可以在代码运行之前检查它们是否正确。所以我的第一个问题是,如果我使用这种方法,是否有任何工具可用于执行此检查并查找所有错误?最好与maven集成,因此这项检查将成为构建过程的一部分。
第二个问题是解决这个问题的其他方法是什么?
答案 0 :(得分:2)
我认为这是自定义注释处理(link to JDK api)的一个很好的用例。您可以使用它在编译时检查注释类的内容是否正确;或者您可以使用它将所需的字段动态添加到类中。 Project Lombok可以让您了解可能的内容。