java - 从另一个方法动态初始化 POJO

标签 java design-patterns reflection type-conversion dynamictype

假设我有一组实现接口(interface)的 POJO 类,但这里没有公共(public)属性。

public interface MainIfc {}

class Ifc1 implements MainIfc {
    private String a1;
    public String getA1() {
        return a1;
    }
    public void setA1(String a1) {
        this.a1 = a1;
    }
}

class Ifc2 implements MainIfc {
    private String x1;
    private String x2;
    public String getX1() {
        return x1;
    }
    public void setX1(String x1) {
        this.x1 = x1;
    }
    public String getX2() {
        return x2;
    }
    public void setX2(String x2) {
        this.x2 = x2;
    }
}

结合这些 POJO 类,我有几个方法可以用来检索基于另一个值和具有值的实际 POJO 返回的 POJO 类型。

public class GetIfc {
    public Class getIfcType(int code) {
        if (code==1)
            return Ifc1.class;
        else
            return Ifc2.class;
    }
    public MainIfc getIfc(int code) {
        if (code==1) {
            Ifc1 thisIfc = new Ifc1();
            thisIfc.setA1("Ifc1");
            return thisIfc;
        } else {
            Ifc2 thisIfc = new Ifc2();
            thisIfc.setX1("Ifc2");
            thisIfc.setX2("Ifc2");
            return thisIfc;
        }
    }
}

有没有一种方法可以让我在代码中安全地读取具体的 POJO 并使用 getter/setter?我已经解决了很多问题,这些问题提供了基于反射的答案,但这对我不起作用。 getter/setter 不可见,当我在返回的对象上调用 .getClass() 时,我看到它是 MainIfc 接口(interface)。

我试图解决的设计问题与我试图设计的 REST API 自动化框架有关。基本上我有一个 ClientResponse 解析器,它会发回我正在寻找的 POJO。但我不希望编写测试用例的人担心返回的 POJO 类型。所以我想我可以返回类型和实例化的 POJO,这样我就可以获得值,但我对如何动态实现这一点感到困扰。

最佳答案

试试这个代码。也许这将返回类中的所有方法以及从 Object 类继承的方法。

   public static void main(String[] args) throws ClassNotFoundException {
        GetIfc getIfc=new GetIfc();
        MainIfc clas1s=getIfc.getIfc(1);
        Class class1= clas1s.getClass();
        System.out.println(class1);
        Method[] mem= class1.getMethods();
        for(Method mmm : mem) {
            System.out.println(mmm.getName());
        }
    }

关于java - 从另一个方法动态初始化 POJO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39163725/

相关文章:

c# - 为什么我的 C# IS 语句不起作用?

java - 使用ajax提交表单时无法阻止默认表单提交

powershell - 如何在Powershell中消除Type.GetProperty方法的歧义?

java - 使用 Thymeleaf 和 Spring Boot 转换器列出 JSON 字符串

c# - 缓存存储库、域或应用程序是否值得关注?

java - 业务代表与服务定位器

java - 以不同方式从另一个对象创建一个对象的设计模式

java - 将给定的类(比方说,java.lang.Object)转换为字节数组。是否可以?

具有重复键的 java 映射

java - 使用 bufferedReader 读取文本文件会添加空格,android