Java 描述其他类的类的模型

Java 描述其他类的类的模型,java,reflection,metadata,Java,Reflection,Metadata,我有个问题,我很久都想不出来了 我正在核心插件架构中构建web应用程序。 插件通过方法提供一些功能。例如: public void doSomething(Input input){ // Some functionality } public class Input{ private String text; private List<String> textList; private InnerField inner; private L

我有个问题,我很久都想不出来了

我正在核心插件架构中构建web应用程序。 插件通过方法提供一些功能。例如:

public void doSomething(Input input){
    // Some functionality
}
public class Input{
    private String text;
    private List<String> textList;
    private InnerField inner;
    private List<InnerField> innerList;
} 
public class InnerField{
    private String text;
    pirvate Integer number;
}
输入类基本上可以是任何东西。例如:

public void doSomething(Input input){
    // Some functionality
}
public class Input{
    private String text;
    private List<String> textList;
    private InnerField inner;
    private List<InnerField> innerList;
} 
public class InnerField{
    private String text;
    pirvate Integer number;
}
公共类输入{
私有字符串文本;
私有列表文本列表;
私人内部领域内部;
私有列表;
} 
公共类内部字段{
私有字符串文本;
皮瓦特整数;
}
核心模块收集插件的所有方法并提供给网页用户,以便用户选择方法并设置输入数据

我知道如何使用java反射api并了解方法和类的元数据。问题在于找出描述输入的类的结构,同时存储对象的数据

换句话说。我想创建一个类,比如说InputData,我可以将它传递到前端,它将:

  • 基于字段声明生成表单
  • 根据数据填写表格
提交时的InputData将被序列化为json并保存在DB中,当然,应该映射到原始输入类,以便我们可以将其传递给插件方法

我在想这样的事情:

public class InputField{
    private String className; //java.lang.String, some.package.CustomClass
    private boolean variable; // if true, the strVal is a reference to other object (stored in map)
    private String strVal; //value parsed to String if it's basic type like String, Integer, Boolean
    private List<InputField> fields; //list of inner fields if it's complex type
}
公共类输入字段{
私有字符串className;//java.lang.String,some.package.CustomClass
私有布尔变量;//如果为true,则strVal是对其他对象的引用(存储在map中)
private String strVal;//如果字符串是String、Integer、Boolean等基本类型,则解析为String的值
私有列表字段;//内部字段的列表(如果是复杂类型)
}
这就足够了,但前提是输入类中没有列表类型

最后一点是,每个字段(甚至输入对象本身)都可以是某个变量的引用。 例如,用户为输入类提供了一些值,并希望重用这些值,所以在表单中,他只提供它引用的变量的名称。在运行时,当我们调用plugin方法时,将此json解析为数据的处理器istead将搜索变量名引用的数据

我知道。。也许你们谁也不知道我在说什么,但我的思维方式太复杂了,我甚至不能很好地解释它

我希望有人能理解我,让我走上正轨。也许有人也有类似的问题

编辑:根据要求,以下是我真正想要实现的简短描述:

基本上,我需要在核心模块中使用一个泛型类来描述编译时未知的对象。从这个泛型类的对象中,我应该能够:

  • 获取用于在前端构建动态表单的元数据,并用数据填充此表单
  • 将此对象映射到原始对象(由泛型类描述的对象
  • 泛型类应该是可序列化的(例如到json)

我“只”需要通用类结构方面的帮助。

我意识到,多亏了斯蒂芬,我问的“问题”的答案对任何人都没有帮助,因为我怀疑有人会面临完全相同的问题

然而,我找到了正确的方法。坦率地说,在这里问一个问题是有帮助的,因为试图解释我想要的是什么让我跳出了思维定势

不管怎样。之前我试图将类定义和对象数据一起保存在一个元类中。我将它们分开,这样我就有了一个类,该类包含关于输入类的定义:

@Data
public class ObjectDefinition{

    private String name;

    private String path; // for example $root.myField.text, $root.listField[$idx].number

    private Class type;

    private boolean collection;

    private boolean basicType;

    private List<ObjectDefinition> fields; //only if this object is not basic
    
}

丑陋?也许吧。没有效率?也许吧。最重要的是它会起作用并且满足我的要求。

我不确定你到底在问什么。请问一个具体的问题……最好是一个不征求意见的问题。我编辑了这篇文章。再一次,你没有问一个具体的问题。你基本上是在描述一个问题,然后说我ng“帮帮我”.请阅读:好的,我现在明白了,但我真的不知道如何更具体地把它分解成更小的编程问题,所以我想我只能靠自己了。好吧,是的,也许吧,但我仍然不清楚您在这里真正需要什么样的帮助。您展示给我们的类中似乎已经有了一个基本的类结构。剩下的是。。。嗯……编码问题。(另一方面,如果你想征求意见……我的意见是,这不会提供一个特别有用的用户界面。程序员更喜欢脚本语言。非程序员会感到困惑。)