2012-09-21 9 views
2

내 프로그램에서; 나는 이름, 설명, 그가 말한 언어, 생성 될 때, 주소, 평판을 저장할 객체가 있습니다. 그러나 필드는 이름, 설명, 언어이어야하며 나머지는 필수가 아닙니다. 두 가지 방법을 쓰고 사용자가 하나를 선택하게하고 사용법에 따라 다른 필드를 null로 만드는 것을 원하지 않습니다.사용자가 입력 한 필드에 따라 필드를 만드는 방법은 무엇입니까?

inside of constructor(name, description, languages) { 
    this.name = name; 
    this.description = description; 
    this.languages = languages; 
    this.address = " "; 
    this.reputation = " "; 
} 

inside of constructor(name, description, languages, address, reputation) { 
    this.name = name; 
    this.description = description; 
    this.languages = languages; 
    this.address = address; 
    this.reputation = reputation; 
} 

어떻게이 문제를 해결할 수 있습니까? 사용자가 제공하는 필드에 따라 필드를 만들 수있는 방법이 있습니까?

자바를 사용하고 있습니다.

미리 감사드립니다.

+0

두 개의 생성자가 필요없는 특별한 이유가 있습니까? – Fildor

+0

@Fildor 첫 번째 이유는 중복 된 필드를 만들어 null로 만들고 싶지 않기 때문입니다. 그리고 다른 이유는 이런 종류의 코드가 아름 다울 것이라고 생각하지 않기 때문입니다. – yns

+0

그래서 선택 필드는 사용되는 것보다 훨씬 더 자주 사용되지 않습니까? 불쾌감은 없지만, 조금 지나친 과잉이라고 느낍니다. 어쩌면 개인적인 취향에 대한 질문 일 수도 있습니다. 힌트 하나 : 데코레이터 패턴에 대해 생각해 보셨습니까? http://www.oodesign.com/decorator-pattern.html – Fildor

답변

1

더 나은 옵션은 변수에 게터 설정 메소드를 제공하여 사용자가 필수 필드에 값을 설정하는 메소드 만 호출 할 수있게하는 것입니다. 그래서 변수에 매핑되는 필드를 사용하여 양식에 대한 Bean 클래스 매핑을 작성하십시오.

public class VarArg { 
    public VarArg(String ... args) 
    { 
     String a = args[0]; 
     String b = args[1]; 
    } 

    public static void main(String[] args) 
    { 
     VarArg arg1 = new VarArg("hello"); 
     VarArg arg2 = new VarArg("hello","goodbye"); 
    } 
} 

을하지만 (위 mauhiz에 의해 제안) 아마 당신의 생성자에 매개 변수로 명명 된 키를 사용하여지도를 사용합니다 :

0

다른 필드 집합을 사용하려면 다른 클래스가 필요합니다. 이 작업을 수행하기 위해 공장이나 빌더를 사용하려는 경우 모든 조합에 대한 클래스를 생성 할 수 있지만 모든 가능한 필드가있는 클래스를 하나 만들고 사용합니다.

0

Java의 매개 변수에는 "기본값"이 없으므로 2 개의 생성자 (하나는 다른 하나를 호출 할 수 있음)를 제공해야합니다.

필드가 매우 동적 인 경우 문자열, 문자열 >을 단일 매개 변수로 사용하는 것은 어떨까요? 이것은 보통 예쁜 패턴이 아니지만 유스 케이스에 맞을 수 있습니다.

0

당신은 가변 인자를 가진 생성자를 만들 수 있습니다.

0

java compiler API을 사용하면 런타임에 다른 Java 프로그램에서 지정할 수있는 소스 코드로 Java 컴파일러를 호출 할 수 있습니다. 아마도 당신이 찾고있는 것은 아니지만, 런타임에 사용자가 귀하의 질문에 대답하기 위해 지정한 필드가있는 클래스를 생성하는 것이 가능합니다. 원하는 경우 예제를 제공 할 수 있습니다.

관련 문제