我有一个具有各种属性的 Pojo,例如
class Book {
public String title;
}
(为简洁起见,省略了 getter 和 setter。)
现在我想拥有这些属性的属性,例如“这个
title
值是从 config.yaml
第 3 行第 5 列读取的”。 (这是我的用例,但我想还有更多。)
我可以添加一个
title_src
属性,没问题。还有耦合。在上面的例子中,错误消息需要了解元属性,实际处理不需要。
A
Map
从属性到元属性?
这会解耦,但我认为没有好的方法可以在不通过反射的情况下构造密钥,并且密钥必须是对象/属性名称组合。
StringWithSource 类型?这将使该属性的每次使用都知道该类型,因此我们具有非常强的耦合,尽管是无反射的。
还有其他设计选项吗?
有更好的方法来实施我已有的选项吗?
现在我想要拥有这样的属性的属性
您的属性似乎不应仅由其实际值组成,因为您已经讨论了标题源、标题行、标题列等。
您的
title
属性可能应该被分解并重构为一个类,例如带有字段的 TitleInfo
: value
、src
、line
、column
等。
class TitleInfo {
private String value;
private String src;
private int line;
private int column;
...
}
class Book {
private TitleInfo title;
}
但是,如果我们进一步推动这个想法,我们可以将其推广并扩展到其他十几个领域。事实上,您可以创建一个泛型类
PropertyInfo<T>
,它可以表示值 T
的泛型属性及其所有详细信息(src
、line
、column
等)。
class PropertyInfo<T> {
private T value;
private String src;
private int line;
private int column;
...
}
class Book {
private PropertyInfo<String> title;
private PropertyInfo<String> author;
private PropertyInfo<BigDecimal> price;
...
}