从Java应用程序生成Java类

从Java应用程序生成Java类,java,class,runtime,Java,Class,Runtime,我试图创建一个数据验证程序,通过运行每个“类型”(如姓名、年龄、性别)并通过其自己的验证方法(每个方法对其数据类型都是唯一的),检查特定数据类型是否有效。唯一的问题是我希望应用程序能够灵活地适应不同的数据类型和不同数量的数据类型 一旦我拥有了所有类型,有没有一种方法可以在运行时从运行中的Java应用程序(例如“编写”一个新类)为每种类型生成一个全新的Java应用程序 示例代码: public class JavaGen(){ public static void main(String[

我试图创建一个数据验证程序,通过运行每个“类型”(如姓名、年龄、性别)并通过其自己的验证方法(每个方法对其数据类型都是唯一的),检查特定数据类型是否有效。唯一的问题是我希望应用程序能够灵活地适应不同的数据类型和不同数量的数据类型

一旦我拥有了所有类型,有没有一种方法可以在运行时从运行中的Java应用程序(例如“编写”一个新类)为每种类型生成一个全新的Java应用程序

示例代码:

public class JavaGen(){
    public static void main(String[] args){

        int dataLength = Integer.parseInt(JOptionPane.showInputDialog("Amount Of Data Types:"));
        String[] dataTypeList = new String[dataLength];

        //Fill up dataTypeList with user input
        writeJavaFile(dataTypeList);
    }

    public void writeJavaFile(String[] dataTypes){
        //Create the new class and its methods here using the array of dataTypes
    }
}
例如,它将创建一类类似于以下内容的方法:

public class ActualClass(){
    public String validate'What The dataTypes[x] was'(String infoToValidate){
        if(etc etc){
            return "etc etc";
        }else{
            return "";
        }
    }
}

您可以在运行时创建、编译和实例化java类

见此:

一些库: cglib 代码模型

或者你可以用纳肖恩。(javascript解释器)我可以想象一个用例,用户用javascript定义复杂的验证,然后这将是一个很好的方法


尽管在您的情况下,我不推荐上述任何一种,只需在代码中编写即可。数据类型验证听起来像是你想要硬编码的东西。

我可以马上告诉你,你正在用一个极其复杂的解决方案解决一个简单的问题…

我猜您正在寻找
instanceof
关键字,或者可能是一个抽象验证类

如果您能更具体地使用预期功能,我们可以帮助您提出合理的设计模式

直接回答您的问题:
是的,您可以动态地用Java生成和加载类。它涉及调用反射包中的
defineClass(String,byte[],int,int)
方法。作为此函数的输入,您必须提供正在实例化的类的字节数组。这听起来不是解决这个问题的合适方法。

那么,您在编译时不知道这些自定义类型?他们来自哪里?生成的类将用于什么?@MickMnemonic自定义类型将由应用程序的用户在启动时输入,因此不,我在编译时没有这些类型。生成的类将是一个包含所有需要创建的验证方法的方法类(因为每种类型都需要自己的特定方法),我还没有看到完整的情况。如果用户可以输入任何类型定义,如何自动生成验证逻辑?定义自定义数据类型的一种常见方法是将它们表示为XML模式,然后通过生成Java绑定对象。你能做一些类似的事情吗?Face table我没有想到…看起来我显然过于复杂化了…我想也许我会坚持在一系列可能的类型中进行硬编码,供用户选择,但感谢您的时间!因此,可能只是进入一个完整的数据类型范围,只允许该范围内的数据类型,然后使用适当的方法?是的,这可能是最好的方法。如果您不需要用户定义自己的数据类型。好的,谢谢您的建议,我就这样说,很抱歉浪费时间:/1基本上预期的功能是:1:用户选择一系列他们想要的数据类型,然后创建一些“对象”,因此每个对象都有所有这些类型,然后当然输入每个“对象”的数据。2:然后通过将每个对象类型的所有数据发送到返回错误字符串的方法来验证这些数据。3:如果数据有任何错误,它将与原始数据一起显示,以便用户可以修复错误。根据您的注释,这里只需要一个元组:数据为字符串,以及预期的类型。将其全部存储在容器对象的数组列表中。