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

标签 java oop

我有一个设计问题。

我有两个数据对象,它们是类 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/

相关文章:

java - 基于正面或反面的抛硬币总值(value)

c# - OOP - 使用改变实现的方法和半固态的对象的正确设计

c++ - 友元函数返回对私有(private)数据成员的引用

java - 在两个类之间发送时丢失数据

python - 类和变量

java - Spring MVC - 如何在缺少参数时返回 404

java - Eclipselink 抛出 ConcurrentModificationException

java - Hibernate EhCache没用过?

java - 如何在android中的listview中获取行的值

java - 安全使用元素