gpt4 book ai didi

java - 设计问题 - java - 最好的方法是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:04:37 25 4
gpt4 key购买 nike

我有一个设计问题。

我有两个数据对象,它们是类 A 和类 B 的实例。A 和 B 没有任何行为——它们是带有 getter 和 setter 的 java bean。我有一个验证接口(interface)和它的 10 个实现,定义了不同的验证。我想在我的属性文件中指定哪个验证适用于哪个类。是这样的:

A 类 XYZValidation,ABCValidation

B 类:ABCValidation、PPPValidation 等

我如何编写我的验证类,以便它服务于 A 类或 B 类实例的对象,或者我将来可能想要添加的任何其他 C 类的实例?

interface Validation {
public boolean check(??);
}

> 只是想添加这一行来感谢所有回复这篇文章的人,并说我很喜欢在这个令人惊叹的网站上度过的时光。 Stackoverflow 棒极了!

最佳答案

您是否考虑过使用注解来标记要在您的 bean 中验证的字段?

如果您有 10 个不同的验证,您可以指定 10 个注释。然后使用注释标记字段:

@ValideStringIsCapitalCase
private String myString;

@ValidateIsNegative
private int myInt;

使用反射 API 遍历所有字段并查看它们是否被标记,如下所示:

public static <T> validateBean(T myBean) throws IllegalAccessException {
Field[] fields = myBean.getClass().getDeclaredFields();
// This does not take fields of superclass into account
if (fields != null) {
for (Field field : allFields) {
if (field.isAnnotationPresent(ValideStringIsCapitalCase.class)) {
field.setAccessible(true);
Object value = field.get(existingEntity);
// Validate
field.setAccessible(false);
}
}
}
}

一个选项是用您要使用的 validator 标记整个类。

编辑:记得包含注释:

@Retention(RetentionPolicy.RUNTIME)

用于您的注释界面。

EDIT2:请不要直接修改字段(如上例所示)。而是使用反射访问它们的 getter 和 setter。

关于java - 设计问题 - java - 最好的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/954675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com