2011-08-18 2 views
0

나는 "C-struct-like"클래스를 정의하는 반복적 인 코드 - 부풀림과 타이핑을 피하고 싶습니다.Java 생성자의 반복성과 부풀림을 줄이는 방법은 무엇입니까?

class Foo { 
    int x; 
    float y; 
    String z; 
    public Foo(int x, float y, String z) { 
     this.x = x; 
     this.y = y; 
     this.z = z; 
    } 
} 

? 예 : 여기에 유용한 Eclipse 트릭이 있습니까?

각 구성원 필드는 한 번만 언급되는 반면 Java에서는 코드를 세 번 언급해야합니다 (해당 생성자 인수의 형식 중 하나).

+3

네,하지만 C에서는 * 해당 멤버를 숨기지 않습니다. 캡슐화의 대가는 간혹 있습니다. (그리고 당신이 그들을 숨기고 싶지 않다면 자바에서도 자세한 표시가 필요 없다.) – dlev

+1

필드가 public이거나 package-private이고 final이 아닌 경우, 정말로 필드를 설정하는 생성자가 필요합니까? 'Foo'의 인스턴스 생성 후에 설정할 수 있습니다. –

+0

또한 C++ 코드는 생성자를 생성하지 않습니다. –

답변

4

일식에서는 자바 편집기에서 마우스 오른쪽 버튼을 클릭하여 소스 -> 필드를 사용하여 생성자를 생성 할 수 있습니다. 그게 당신이 찾고있는 것 같아요.

+0

와트에서 내 '텍스트 용어'를 수정 해 주셔서 감사합니다. 나는 그것을 돌볼 것이다! – cheekoo

+1

네, 이것이 갈 길입니다. 이 바로 가기를 사용하면 원하는대로 세 줄을 입력하면 나머지는 이클립스가 처리합니다. 그것을 얻기위한 키보드 단축키가 있습니다 : Alt + Shift + S, O – hbhakhra

1

Java에서는 그럴 수 없습니다. 불행히도 생성자에서 해당 값을 초기화하려는 경우입니다. 스칼라는 다른 JVM 언어에 열려있는 경우이를위한 솔루션을 제공합니다 ...

편집 : 모든 필드를 공개 할 수 있습니다. 이론 상으로는 이것은 나쁜 생각입니다. 실제로는 때로는 올바른 해결책입니다.

2

Eclipse에는 소스 메뉴의 "생성자 생성 필드 생성 ..."이 있습니다.

2

당신 할 자바뿐만 아니라,하지만 기본 OOP 원칙에 있음 :

class Foo { 
    public int x; 
    public float y; 
    public String z; 
} 

다른 클래스 :

Foo foo = new Foo(); 
foo.x = 1; 
// etc.. 

그냥 C의 구조체와 같은 :

struct Foo { 
    int x; 
    float y; 
    char *z; 
}; 

struct Foo foo; 
foo.x = 1; 
// etc... 
관련 문제