我正在学习Java(和Swing),并且正在开发一个小代码生成器,它在向您提供一些信息后生成Java类。
第一个窗口询问类名称(必填),母班名称,并询问您是否要生成默认构造函数。按Generate后,会打开JDialog
生成的类。
但是我的问题出现在代码生成的通用方面。
保存有关课程的信息后,我会调用generateCode
函数,如下所示:
private String generateCode(Information info) {
String code = "";
// info contains all the information inputed by the user
if (info.motherClass.equals("") && info.generateDefaultConstructor == false) {
code = "public class " + info.name + "{\n\n}";
} else {
}
return code;
}
如您所见,我只处理只给出类名的情况。
我应该如何编码以处理其他选项?应该是一个条件处理一切一个一个?我真的想让我的代码尽可能通用,以便稍后添加更多功能。
谢谢。
答案 0 :(得分:0)
您可以将信息作为字符串列表进行迭代,并跳过代码生成,其中列表为空字符串。
答案 1 :(得分:0)
首先,我建议制作Information
private
或protected
添加getters
和setters
的所有非静态字段。
然后添加一些可以检查和/或操纵Strings
的方法,如:
public static String removeSpaces(String input) {
if (input == null) {
return "";
}
String enter = (char) (13) + (char) (10) + "";
String tab = (char) (9) + "";
String space = (char) (32) + "";
String empty = "";
return input.replace(enter, empty).replace(tab, empty).replace(space, empty);
}
public static String newLine(){
return (char) (13) + (char) (10) + "";
}
public static String tab(){
return (char) (9) + "";
}
然后将generateCode方法拆分为:
private String generateCode(Information info) {
StringBuilder code = new StringBuilder();
code.append(getClassCode(info.getMotherClass()));
code.append(newLine());
code.append(tab());
code.append(getConstructor(info));
return code.toString();
}
public static String getClassCode(String className){
StringBuilder code = new StringBuilder();
code.append("public class ");
if (!removeSpaces(className).isEmpty()){
code.append(className);
} else {
code.append(Information.getDefaultClass());//have a default static name for a class like "Application"
}
code.append("{");
code.append(newLine());
return code.toString();
}
public static String getConstructor(Information info){
StringBuilder code = new StringBuilder();
if(!info.isGenerateDefaultConstructor()) {
code.append("public ");
code.append(info.getMotherClass());
code.append("(){");
code.append(newLine());
code.append(tab());
code.append(info.getConstructorContent());//what will be in the constructor
code.append(newLine());
code.append(tab());
code.append("}");
}
code.append(newLine());
return code.toString();
}
然后你可以在这里和那里添加点点滴滴继续前进。