2015-04-05 54 views
0

我想创建一个数据验证程序,通过它自己的验证方法来运行每个“类型”(例如名称,年龄,性别)来检查特定的数据类型是否有效每种方法对其数据类型都是唯一的),唯一的问题是我希望应用程序对不同的数据类型和不同数量的数据类型具有灵活性。从Java应用程序生成Java类

有没有一种方法,我可以真正生成一个全新的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 ""; 
     } 
    } 
} 
+1

所以,你不知道这些自定义类型在编译时?他们来自哪里?生成的类将用于什么? – 2015-04-05 19:18:01

+0

@MickMnemonic自定义类型将由应用程序的用户在启动时输入,因此在编译时我没有它们。生成的类将是一个方法类,其中包含所有需要创建的验证方法(因为每种类型都需要它自己的特定方法) – SchoolJava101 2015-04-05 19:25:51

+0

我还没有看到完整的图片。如果用户可以输入_any_类型定义,那么验证逻辑如何自动生成?定义自定义数据类型的常用方法是在例如一个XML模式,然后通过[JAXB](http://en.m.wikipedia.org/wiki/Java_Architecture_for_XML_Binding)生成Java绑定对象。你能做类似的事吗? – 2015-04-05 19:35:22

回答

0

您可以创建,编辑和运行实例化一个Java类。

看到这个: http://www.java-tips.org/java-se-tips/java.lang/create-a-java-source-dynamically-compile-and.html

一些图书馆: CGLIB Codemodel

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

虽然在你的情况下,我不会推荐任何上述,只是写在代码中。数据类型验证听起来像是你想要硬编码的东西。

+0

因此,也许只是输入一个完整的数据类型范围,只允许在该范围内的数据类型,然后使用适当的方法? – SchoolJava101 2015-04-05 19:32:17

+0

是的,这可能是最好的方法。如果你不需要用户定义他自己的数据类型。 – 2015-04-05 19:35:44

+0

好的,谢谢你的建议,我会随着那个,然后对不起,浪费时间:/ – SchoolJava101 2015-04-05 19:38:36

0

我可以告诉你马上蝙蝠您正在使用一个非常复杂的解决方案接近一个简单的问题...

我会猜测你正在寻找的instanceof关键字,或者是一个抽象的验证类。

如果您可以更具体地了解您的预期功能,我们可以帮助您想出一个合理的设计模式。

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

+0

基本上预期的功能是: 1:用户选择他们想要的一系列数据类型,然后创建“对象”,因此每个对象都具有所有这些类型,然后为每个“对象”输入数据。 2:然后通过将数据发送给返回错误字符串的方法来验证每个对象类型的所有数据。 3:如果数据出现任何错误,则会与原始数据一起显示,以便用户修复错误。 – SchoolJava101 2015-04-05 19:33:21

+0

根据您的意见,这里除了元组之外没有任何要求:数据为字符串,以及期望的类型。将其全部存储在容器对象的数组列表中。 – 2015-04-05 23:15:17