2017-12-16 10 views
3

다음 항목에 도움이 모든 발전기 있습니까 :Java : 회원 1 인당 생성 가능성이 롬 보크 또는 Intellij IDEA?

private String attribute1; 

내가 발전기 또는 유사한 무언가를 갖고 싶어, 내가 가지고하는 데 도움이 :

자바 클래스에서, 나는이 멤버 속성이 이 코드 란 :

public boolean equalsAttribute1(MyClass myClass) { 
    return myClass.getAttribute1().equals(this.attribute1); 
} 

롬 보크는 이러한 가능성을 제공합니까? 또는 Intellij IDEA 플러그인이 있습니까?

+1

몇 년 동안 이런 일은 절대로 필요하지 않았습니다. 그래서 나는 거의 자동화할만한 가치가없는 경우가 거의 없다고 생각합니다. – Henry

+2

행운 :-) :-) – user7450524

답변

0

가장 가까운 템플릿은 라이브 템플릿입니다. 이러한 탭 뒤에 "EQ"로 뭔가를

NAME=capitalize(clipboard()) 
CLASS=className() 
CamelCaseName=camelCase(NAME) 

바인딩이 :

public boolean equals$NAME$($CLASS$ myClass) { 
    return myClass.get$NAME$().equals(this.$CamelCaseName$); 
} 

이 변수는 다음과 같이 정의된다 :로 라이브 템플릿에 대한 템플릿을 정의합니다.

이제 속성 이름을 클립 보드에 복사하고 메소드를 원하는 위치로 커서를 이동 한 다음 "eq"다음에 tab을 입력하십시오. 그것은 당신이 원하는 것을 제공하기 위해 확장되어야합니다.

아마도 매크로를 많이 정의 할 수 있습니다.

0

코드가 getter와 fields를 섞어서 NPE를 던졌습니다.

정말 많은 방법이 필요합니까, 아니면 더 일반적인 하나의 방법이 필요합니까?

나는 많은 방법들이 유용하기 때문에 후자를 강력히 선호한다. 호출자가 필요하고 코드가 커지게된다.

이렇게하려면 반사 또는 주석 처리를 사용할 수 있습니다. 리플렉션에는 약간의 런타임 오버 헤드가 있습니다 (예전만큼 나쁜 것은 아니지만) 보안 관리자가 금지하지 않는 한 비공개 멤버에 액세스 할 수 있습니다. 다음과 같은

뭔가 내가 불변의 결과를 선호하지만, 필요하지 않은 왜냐면

public static ImmutableSet<String> differingFields(Object o1, Object o2) throws IllegalAccessException { 
    checkNotNull(o1); 
    checkNotNull(o2); 
    checkArgument(o1.getClass() != o2.getClass()); 
    ImmutableSet.Builder<String> result = ImmutableSet.builder(); 
    for (Field f : o1.getClass().getDeclaredFields()) { 
     f.setAccessible(true); 
     if (!Objects.equals(f.get(o1), f.get(o2))) { 
      result.add(f.getName()); 
     } 
    } 
    return result.build(); 
} 

그것은 구아바를 사용

을 수행해야합니다. 비효율적 인 것은 autoboxing과 반사 액세스에서 비롯된 것이며 아마 받아 들일 만하다.

정확하게 동일한 클래스의 인스턴스가 전달 될 때만 작동합니다. 상속 된 필드는 무시됩니다. 이것은 쉽게 고칠 수 있습니다.

필드 이름 대신 Guava의 MapDifference 또는 그와 비슷한 값을 반환 할 수 있습니다. differingFields을 구현하는 대신 개체를지도로 변환하여 작업 할 수 있습니다.