java - 如何对具有不同方法名称但相同返回类型的不同对象应用相同的过程

标签 java java-8

这是我的问题,在这个例子中我有 2 个类(但几乎 10 个 IRL)从 xsd 自动生成

public Toto {
    public Toto(String date, String valueFromToto) {
        this.date = date;
        this.valueFromToto = valueFromToto;
    }
    public String getDate() {
        return this.date;
    }

    public String getValueFromToto() {
        return this.valueFromToto;
    }
}

public Titi {
    public Titi(String date, String valueFromTiti) {
        this.date = date;
        this.valueFromTiti = valueFromTiti;
    }
    public String getDate() {
        return this.date;
    }

    public String getValueFromTiti() {
        return this.valueFromTiti ;
    }
}

我希望每个类(class)都有相同的流程 但我不知道最好的方法来做到这一点。我正在寻找“反射”,但这似乎是一个糟糕的解决方案。功能接口(interface)怎么样?

    public String test(List<Toto or Titi> liste, LocalDate date) {

        for (Toto or Titi o : liste) {

            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("ddMMyyyy");
            LocalDate localDateToTest = LocalDate.parse(o.getDate(), formatter);
            if (date.isAfter(localDateToTest))
                return o.getValueFromToto() or o.getValueFromTiti();
        }
        return "";
    }

如果有人能指出我正确的方向 提前致谢

最佳答案

JAXB2 绑定(bind)可用于自定义代码生成,以便两个方法具有相同的名称。并且 JAXB2 Basics Inheritance 插件 ( https://github.com/highsource/jaxb2-basics/wiki/JAXB2-Inheritance-Plugin ) 可用于使它们都继承一个接口(interface)。

基本上,您将提供一个像这样的绑定(bind)文件(*.xjb)(这只是一个示例,未经测试):

<?xml version="1.0"?>
<jxb:bindings
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:inheritance="http://jaxb2-commons.dev.java.net/basic/inheritance"
    jxb:extensionBindingPrefixes="inheritance"
    jxb:version="2.1">
    <jxb:bindings schemaLocation="MyXSD.xsd">
        <jxb:bindings node="//xs:complexType[@name='Toto']//xs:element[@name='valueFromToto']">
            <jxb:property name="value"/>
        </jxb:bindings>
        <jxb:bindings node="//xs:complexType[@name='Toto']">
            <jxb:class name="Toto" />
            <inheritance:implements>org.example.WithValue</inheritance:implements>
        </jxb:bindings>
        <jxb:bindings node="//xs:complexType[@name='Titi']//xs:element[@name='valueFromTiti']">
            <jxb:property name="value"/>
        </jxb:bindings>
        <jxb:bindings node="//xs:complexType[@name='Titi']">
            <jxb:class name="Toto" />
            <inheritance:implements>org.example.WithValue</inheritance:implements>
        </jxb:bindings>
    </jxb:bindings>
</jxb:bindings>

org.example.WithValue 看起来像这样:

package org.example;

public interface WithValue {
   String getValue();
}

如果您使用 Maven 从 XSD 生成代码,则插件配置将如下所示(其中 XSD 和绑定(bind)文件都位于/src/main/resources/xsd/目录中):

<plugin>
    <groupId>org.jvnet.jaxb2.maven2</groupId>
    <artifactId>maven-jaxb2-plugin</artifactId>
    <version>${maven-jaxb2-plugin.version}</version>
    <executions>
        <execution>
            <id>generate</id>
            <goals>
                <goal>generate</goal>
            </goals>
            <phase>generate-sources</phase>
            <configuration>
                <bindingDirectory>${project.basedir}/src/main/resources/xsd/</bindingDirectory>
                <schemaDirectory>${project.basedir}/src/main/resources/xsd/</schemaDirectory>
                <args>
                    <arg>-Xinheritance</arg>
                </args>
                <plugins>
                    <plugin>
                        <groupId>org.jvnet.jaxb2_commons</groupId>
                        <artifactId>jaxb2-basics</artifactId>
                        <version>${jaxb2-basics.version}</version>
                    </plugin>
                </plugins>
            </configuration>
        </execution>
    </executions>
</plugin>

关于java - 如何对具有不同方法名称但相同返回类型的不同对象应用相同的过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60974942/

相关文章:

java - 如何将项目转换为maven?

java - 在 Scala 或 Java 中,如何获取应用程序当前占用了多少 RAM?

java - 创建已完成的 CompletableFuture<Void> 的正确方法是什么

spring-boot - spring-boot-starter-data-jpa给出了非零退出值1

java - 使用java进行MySQL查询解析

Java - 使用一台计算机测试两个 TCP 客户端

java - 使用 Spark 和 java 编写 CSV 文件 - 处理空值和引号

java - 收集 HashMap<String, List<String>> java 8

java - 删除 CSV 文件中的行

java - 检查 map 中存在的值列表的最佳方法