2016-10-06 5 views
1

나는 Java (및 Swing)를 배우고 있으며, 정보를 요청한 후에 Java 클래스를 생성하는 작은 코드 생성기를 개발 중이다.Java의 일반 코드 생성

첫 번째 창 (필수) 클래스 이름, 어머니 클래스 이름을 요청하고 당신이 기본 생성자를 생성하고자하는 경우 묻습니다. 생성을 누르면 JDialog이 생성 된 클래스로 열립니다.

하지만 내 문제는 제 코드 생성의 일반적인 측면에 있습니다. 난 단지 단지 클래스 이름이 주어진 경우를 처리,

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; 
} 

당신이 볼 수 있듯이 : 클래스에 대한 정보가 저장되면

, 나는 같은과 같은 내 generateCode 함수를 호출합니다.

다른 옵션을 처리하려면 어떻게 코딩해야합니까? 모든 것을 하나씩 처리하는 조건 블록이 있어야합니까? 나중에 더 많은 기능을 추가하기 위해 가능한 한 제네릭 코드를 만들고 싶습니다.

감사합니다.

+2

"나중에 더 많은 기능을 추가하기 위해 가능한 한 제네릭 코드를 만들고 싶습니다." [YAGNI] (https://en.wikipedia.org/wiki/YAGNI). –

+0

나는이 말을 몰랐다. 나는 킥킥 웃었다. 당신은 절대적으로 옳았습니다. 그러나 제네릭 코딩에 대해서도 배우려고합니다. 그래서 그것을 교훈으로보십시오. –

+2

코드는 유용성과 성능을 희생하면서 무한히 일반적이고 사용자 정의 할 수 있습니다. 코드 작성을 시작하기 전에 지원하려는 유스 케이스를 결정해야합니다. –

답변

0

첫째.

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 방법을 분할 :

다음 확인 및/또는 같은 Strings 조작 할 수있는 몇 가지 방법을 추가

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(); 
} 

을 그리고 당신은 추가하여 계속 할 수 있습니다 여기 저기에있는 조각들.

0

info를 문자열 목록으로 만들고 목록을 빈 문자열로 만드는 코드 생성을 건너 뛸 수 있습니다.

내가 getterssetters을 추가 Information private 또는 protected의 모든 없음 정적 필드를 만드는 것이 좋습니다 모든