2009-04-20 4 views
4

Groovy가 인스턴스 변수와 클래스 변수를 공용으로 만들고 getter 및 setter를 대신 작성하는 방법을 좋아합니다. 이렇게하면 많은 불필요한 코딩을 줄일 수 있습니다. 반면에, 내 상사는 Groovy를 사용하지 않고 Java의 지나친 verboseness에 대한 해결책을 찾고 있는데

는 그루비 또는 다른 프레임 워크를 사용하지 않고 자바에서 그루비의 간결함을 달성 할 수있는 방법이 있나요 :(나를 매우 슬프게 만들고, 그것을 싫어/부가 기능은?

그래서 내가 찾고있는 것은 Groovy 나 그와 비슷한 것을 사용하지 않고 Java의 과도한 verboseness에 대한 해결책이다.

Java만으로 모든 것을 공개 할 수 있습니까?

답변

3

변경 불가능한 데이터 구조로 이동하십시오. 게터도, 세터도, 번거 로움도 없습니다.

Functional Java을 사용해 볼 수도 있습니다. 이것은 단지 일반적인 자바 라이브러리 일 뿐이지 만 더 적은 코드로 더 많은 것을 말할 수있는 강력한 추상화와 유용한 (변경 불가능한) 데이터 구조를 제공합니다. 예를 들어,이 번역 :

List<String> s = new ArrayList<String>(); 
    for (String x : xs) { 
    for (String y : ys) { 
     for (String z : zs) { 
     s.add(doSomething(x, y, z)); 
     } 
    } 
    } 

을 ... 여기에 : http://code.google.com/p/javadude/wiki/Annotations

주석 프로세서는 일반적으로 많이 당신을위한 슈퍼 클래스를 생성

List<String> s = xs.bind(ys, zs, doSomething); 
+0

흥미 롭습니다. 이것은 Ruby의 블록과 유사한 기능을 추가합니까? –

+0

일반 클로저 (Ruby의 "블록") 역할을하는 여러 유형이 제공됩니다. F 은 A 타입에서 B 타입까지의 함수입니다. A 타입의 인수를 취하는 액션을 모델링 한 Effect 이 있습니다. 어떤 유형의 값을내는 P1 이 있습니다. – Apocalisp

+0

또한, BGGA 프리 컴파일러를 사용하고자한다면이 구조를 사용하는 것이 덜 장황하다. 이것은 필수는 아니지만 더 멋지게 보입니다. – Apocalisp

8

Java 언어는 그대로입니다. 새로운 언어 (예 : 그루비)로 이동하지 않고도 핵심 언어를 변경하는 것이별로 없습니다. 경영진으로부터 바이 인을 얻는 것이 당신이 그루비로 이동하는 것이 어렵지 않을 수도 있습니다. 나는 몇 년 전에 너와 비슷한 입장에 있었다. Groovy를 소프트웨어의 몇 가지 영역에 도입 할 수 있습니다.

시작하기 좋은 곳은 단위 테스트를 위해 시작하는 것입니다. 근본적으로 Groovy에 클래스를 작성하면 Java 바이트 코드로 컴파일됩니다. 클래스 패스에 그루비 한 항아리가있는 한 다른 사람들은 그것이 그루비 코드라는 것을 모를 수도 있습니다. 테스트 용으로이 코드를 사용하여 코드를 단순화하고 작업을 더 쉽게 수행 할 수 있음을 보여줄 수 있습니다. 당신은 그것을 경영진에게 팔 수 있어야합니다.

동적 언어가 도움이되는 다른 새로운 영역에 계속해서 소개하십시오. Groovy와 Java는 동일한 코어 라이브러리 집합을 사용하므로 서로 잘 섞여 있습니다.

0

특정 작업 (JPA, 스윙 등)을위한보다 효과적인 프레임 워크를 제외하고 소스 코드를 더 작게 만들 수있는 것에 대해서는 잘 알고 있지 않습니다.

일반적으로 기능이 IDE에서 제공되는 경우 이러한 종류입니다.

필자는 Netbeans에 getters/setters를 작성하고 추상 메소드를 구현하며 다양한 기타 단축키를 사용할 수 있습니다. 물론 소스 코드는 여전히 장황하다.

6

이런 상황에서 getter와 setter를 쓸 수있는 IDE는 친구가 될 수 있습니다.

getters와 setters를 작성하는 것이 새로운 클래스를 작성하는 데있어 가장 반복적이고 흥미롭지 않은 부분이라는 것을 알고 있습니다. Eclipse과 같은 IDE를 사용하면 automatically generate the getters and setters을 사용할 수 있으므로 중복 코드 작성의 어려움을 줄일 수 있습니다.

물론, getXsetX 메서드를 사용할 필요가 없지만 적어도 클래스의 구현을 조금 더 쉽고 부담을 덜어줍니다.

+0

차갑다. 나는 이클립스를 사용하지만이 기능이 있다는 것을 모르고 있었다. –

+0

리팩토링 도구와 함께 Eclipse의 getter/setter 생성 기능이 매우 유용하다는 것을 알게되었습니다. – coobird

+0

IntelliJ IDEA는 getter 및 setter도 생성합니다. –

1

AOP를 사용하여 자세한 표시를 제거 할 수 있습니다.

예를 들어 속성이있는 경우 : 문자열 이름;

다음과 같이 정의 할 수 있습니다. @GetterSetter public String Name (String name) {};

그런 다음 주석을 찾아 주변에 배치하여 매개 변수가 null이거나 쓰기 (매개 변수가 null이 아님) 때의 읽기가 완료되면 주석이 필요합니다. 알맞은 행동.

작성하기가 매우 쉽지만, AOP를 구매해야만 어려울 수 있습니다.

그러나 다른 언급했듯이 Eclipse와 Netbeans는 getters/setter를 쉽게 만들 수 있으므로 특별한 작업을 수행하지 않아도된다면 매우 간단합니다.

나는 getters/setters 인 자신의 클래스에 내 속성을 넣는 경향이있다. 그런 다음 필요에 따라 동등성 및 해시 메서드는 물론, 다른 클래스에도 I를 사용할 필요가 없다. 그냥 사용하고 지루한 추가 코딩을 숨 깁니다.

0

내 콩 주석을 사용 해보세요 일반적으로 작성해야하는 상용구 :

@Bean(
    properties={ 
     @Property(name="name", bound=true), 
     @Property(name="age", type=int.class, bound=true) 
    } 
) 
public class Person extends PersonGen { 
} 
0

도메인 별 프레임 워크를 사용하여 Java의 효과적인 추상화 수준을 크게 높일 수 있습니다. 예를 들어 Restlet은 RESTful 웹 서비스를 작성할 때 지루한 세부 사항 대부분을 처리합니다. 또는 POJO를 XML 또는 JSON간에 매핑해야하는 경우 XStream 또는 JAXB와 같은 패키지가 자동으로 매핑 논리를 생성합니다. 지루한 JDBC 프로그래밍을 피하려면 iBatis 또는 Hibernate와 같은 지속성 관리자를 사용해보십시오. Freemarker 및 Velocity와 같은 템플릿 시스템을 사용하면 마크 업을 생성하는 것이 훨씬 쉬워집니다.

도구 지원이없는 곳에서도 낮은 수준의 세부 정보를 일반적인 방법 및 클래스로 분류하여 최상위 코드가 더 추상적으로 느껴질 수 있습니다.

은 (인스턴스가 단위 테스트의 일부를 쓰기 위해 당신이 당신의 프로젝트에 대한 지원 역할에 그루비를 평가할 수있는 경우에 당신은 당신의 상사를 요청하는 것이 좋습니다.)

0

당신은 어떤 어떤 속성 또는 메서드를 레이블을 지정할 수 있습니다 Groovy에서 표준 액세스 수정 자 또는 유형 선언.

Groovy는 Java의 수퍼 세트입니다.