java - 如何区分类的实例?

标签 java

我有 Validator 类,它管理来自文件和数据库的所有验证标准。但是这个条件是由 Loader 像这样加载的:

Validator validator = Loader.load("clients"); //get all from clients.cfg file

从另一个类确定当前加载了哪些条件的最佳方法是什么?

Importer importer;
Validator clientsValidator = Loader.load("clients");
Validator addressValidator = Loader.load("address"); ...
importer.validate(data, clientsValidator, addressValidator);

public class Importer{
   public void validate(Data data, Validator... validator){
      ...
      validateClient(data, one of validators);
      validateAddress(data, another of validator);
      ...
   }
}

我需要知道在 Importer 类中,哪个 Validator 用于客户端,哪个用于地址...有什么好的方法吗?

最佳答案

最好的方法是为 Validator 添加一个字段和相应的方法返回创建它的标识符(例如 "clients")。

或者,如果在调用 Loader.load() 时使用不同的标识符你会得到实现 Validator 的不同类的实例接口(interface),那么你可以使用 Object.getClass() 区分这些类的方法。如果这些类在一个非常小的集合中,你甚至可以使用 instanceof 来逃避直接。

我们需要更多信息,例如 Loader到底做了什么 Validator在能够提供更具体的答案之前,您可以更改他们的代码多少。

编辑:

老实说,也许您应该重新考虑重新设计您的数据模型。就目前而言,您显然可以在不进行任何检查的情况下混合使用客户端和地址。您应该重构您的代码,以便能够依赖 Java 的类型安全功能。

一种方法是拥有一个通用类/接口(interface) Validator<T> , 其中T将验证对象的类:

public interface Validator<T> {
    public boolean validate(T object);
}

然后你可以有特定的 Data数据的子类,例如 AddressClient , 并设置类型 Validator反对 Importer通过具体方法:

public class Importer {
    public void addAddressValidator(Validator<Address> validator) {
        ...
    }

    public void addClientValidator(Validator<Client> validator) {
        ...
    }
}

这比在单个可变参数方法调用中混合所有 validator 对象要安全得多,它也是大多数常见框架的首选方法。

关于java - 如何区分类的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14974723/

相关文章:

java - 如何使用 QueueChannel 和 ServiceActivator 正确配置 TCP inboundAdapter

Java 将字符串添加到字符串数组

java - JAXB 解码返回属性的空值

java - Bigcommerce API Java 创建发货错误 400

java - (ning) 异步 HTTP 客户端是否对查询参数进行编码?

java - 读取大文件(Java堆空间)

java - jTable 单元格背景颜色

java - 如何在非父 Activity 中更改小部件

java - 如何在 java 中显示 ms outlook 的通知,如弹出窗口?

java - 是否可以引用静态字符串作为Android list 中的值?