자바 게터 및 세터
Java에서 getter 및 setter를 만드는 더 나은 표준 방법이 있습니까?
각 변수에 대해 getter와 setter를 명시 적으로 정의해야하는 것은 매우 장황합니다. 더 나은 표준 주석 접근 방식이 있습니까?
Spring에 이와 같은 것이 있습니까?
C #에도 속성이 있습니다.
'표준'이라고 생각할지 모르겠지만 Project Lombok 은이 문제를 해결합니다. 그들은 주석을 사용하여 Java의 많은 정보를 대체합니다.
어떤 사람들은 Groovy 또는 Scala와 같은 대체 Java 형제 언어를 찾고 있습니다. JSR이 Java에서이 문제를 "고정"하는 "표준화 된"방법을 알아 내기까지는 몇 년이 걸릴 것 같습니다.
Eclipse에는 다른 많은 IDE에서 수행하는 것처럼 자동 생성되는 컨텍스트 메뉴 옵션이 있습니다.
이클립스와 관련이없는 주석을 몇 개 만들었습니다.
http://code.google.com/p/javadude/wiki/Annotations 참조
예를 들면 :
package sample;
import com.javadude.annotation.Bean;
import com.javadude.annotation.Property;
import com.javadude.annotation.PropertyKind;
@Bean(properties={
@Property(name="name"),
@Property(name="phone", bound=true),
@Property(name="friend", type=Person.class, kind=PropertyKind.LIST)
})
public class Person extends PersonGen {
}
내 주석은 수퍼 클래스를 생성합니다. 나는 Lombok이 컴파일되는 실제 클래스를 수정한다고 생각합니다 (공식적으로 Sun에서 지원하지 않으며 중단 될 수 있습니다-작동 방식에 대해서는 틀릴 수 있지만 내가 본 것에 따라 그들이 그렇게하고 있어야 함)
즐겨! -스콧
다음은 주제에 대한 흥미로운 기사입니다. http://cafe.elharo.com/java/why-java-doesnt-need-properties-it-already-has-them/
속성은 지름길이라고 생각하지만 실제 중요한 기능보다 작은 기능입니다
대부분의 IDE는 코드 생성을위한 바로 가기를 제공합니다 (예 : Eclipse : 마우스 오른쪽 버튼 클릭-> 소스-> Getters & Setters 생성 ). 이것이 귀하가 찾고있는 답이 아닐 수도 있음을 알고 있습니다.
일부 IOC 프레임 워크는 프레임 워크의 컨텍스트 (예 : Tapestry IOC 및 최신 Spring)에서 사용할 수 있도록 속성에 주석을 달 수 있습니다 (하지만이 용도는 프레임 워크에서 사용하도록 제한됨).
getter / setter가 장황하다는 데 동의합니다. Project Lombok 은 다른 사람들이 제안한대로 이에 대한 좋은 답변을 제공합니다. 그렇지 않으면 IDE의 기능을 사용하여 생성 할 수 있습니다.
@RooJavaBean 어노테이션이있는 Spring Roo 프로젝트도 있습니다. 또한 @RooToString 및 @RooHashCodeEquals 또는 이와 유사한 것이 있습니다. 적절한 방법으로 AspectJ 파일을 백그라운드에서 생성합니다.
Netbeans를 사용하면 getter / setter를 대체 할 위치에 get 또는 set 입력을 시작하고 자동 완성 (Ctrl + Space)을 호출하면 getter 또는 setter를 생성 할 수있는 옵션이 제공됩니다. 또한 생성자를 생성하는 옵션도 제공합니다.
언어의 일부인 더 좋은 방법은 없습니다. "property"키워드와 같은 것은 없습니다.
다른 사람들이 언급했듯이 한 가지 대안은 IDE를 사용하여 생성하는 것입니다. 또 다른 방법 은 이것이 필요한 객체가 많은 경우 기본 클래스를 가져 와서 getter 및 setter로 래퍼를 생성하는 코드 생성 도구를 작성하는 것입니다.
변수를 공용 멤버로 간단히 노출 할 수도 있습니다. 그러나 나중에 유효성 검사 논리를 추가하기로 결정할 때 이것은 아마도 당신을 해칠 것입니다.
그러나 한 가지 마지막 생각 : 클래스가 단순히 데이터를 전송하는 데 사용되지 않는 한 내부 상태를 노출해서는 안됩니다. IMO, getter와 setter가있는 "behavior"클래스는 코드 냄새입니다.
가능한 대안으로 Scala 를 사용해 보셨습니까 ? Java 바이트 코드로 컴파일되며 Java 프로그래머로서의 삶을 더 쉽게 만들어 줄 수있는 흥미로운 단축키가 많이 있습니다.
예를 들어 속성 :
case class Person(var name:String,
var age:Int);
val p = Person("John", 4)
p.name
p.name = "Charlie"
p.name
그리고 출력 :
defined class Person
p: Person = Person(John,4)
res7: String = John
res8: String = Charlie
다음과 같이 시도하십시오.
@Getter @Setter private int 연령 = 10;
아래에 더 많은 정보 :
https://projectlombok.org/features/GetterSetter
네, 당신은 운이 좋지 않습니다. Groovy는 당신을 위해 그것들을 생성하지만 표준 자바에서는 주사위가 없습니다. Eclipse를 사용 하면 매우 쉽게 생성 할 수 있을뿐만 아니라 hashCode () 및 equals () 함수도 생성 할 수 있습니다 .
That's the work of the IDE to generate repetitive verbose code as getters/setters
Use your IDE to generate it for you and try to minimize the amount of getters/ setters that you have - you will likely enjoy the added benefit of immutability.
I like the C# syntax for properties, I think it's pretty and clean, and pretty clean.
Well, one option is don't be so afraid of public fields. For simple classes that you know will never do validation or extra work under the hood on get and set, public fields require less boilerplate, are syntactically nicer, and are more efficient.
If you use emacs it might be possible to define an emacs macro that does this for you. Any emacs gurus out there? :)
ReferenceURL : https://stackoverflow.com/questions/1907312/java-getters-and-setters
'development' 카테고리의 다른 글
vector :: iterator 또는 at ()을 사용하여 STL 벡터를 반복하는 것이 더 빠릅니다. (0) | 2020.12.29 |
---|---|
NSURLConnection의 userAgent 변경 (0) | 2020.12.29 |
XML 속성에 줄 바꿈을 저장하는 방법은 무엇입니까? (0) | 2020.12.29 |
대기열을 사용하는 생산자 / 소비자 스레드 (0) | 2020.12.29 |
기본 클래스에서 공개적으로 상속하지만 파생 클래스에서 기본 클래스의 일부 공용 메서드를 개인으로 만드는 방법은 무엇입니까? (0) | 2020.12.29 |