Foo라는 클래스의 String타입의 name이름의 프로퍼티가 있다고 할 때,
JavaBean 규약에 의하면 getter와 setter의 이름은 각각,
String getName()과 void setName()이 된다.
이클립스에서 POJO형태의 클래스를 만들때 보통 메소드 자동생성기능을 이용한다.
Source > Generate Getters and Setters...
문제는 두번째 글자가 대문자일 경우에 이클립스는 첫 번째 문자를 대문자로 바꾸지 않고 소문자로 놔둔다는 것이다.
nName이라는 프로퍼티는 아래처럼 바뀐다.
별로 상관없을지 모르나 리플렉션(reflection)을 통해 메소드를 가져오는 경우 아래와 같은 메세지가 나오면서 예외가 발생한다.
java.beans.IntrospectionException: Method not found: isNName
at java.beans.PropertyDescriptor.<init>(PropertyDescriptor.java:106)
at java.beans.PropertyDescriptor.<init>(PropertyDescriptor.java:70)
at com.tistory.namocom.FooTest.main(FooTest.java:10)
관련 샘플코드
public class Foo {
private String name;
private String nName;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getnName() {
return nName;
}
public void setnName(String nName) {
this.nName = nName;
}
}
import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
public class FooTest {
public static void main(String[] args) {
try {
PropertyDescriptor propDesc =
new PropertyDescriptor("nName", Foo.class);;
System.out.println(propDesc);
} catch (IntrospectionException ie) {
ie.printStackTrace();
}
}
}
예외에서는 isNName이라고 나오기는 하는데, 이것은 나중에 메소드 찾는 과정에서 getNName이라고 바뀐다.
따라서 getnName()을 getNName()으로 바꾸어주면 문제는 해결된다.
관련된 내용은 이클립스 버그리포트 페이지중 322223에서 확인할 수 있다.
Generate Getter/Setter creates wrong names for fields having upper case second char
StackOverflow에서도 관련 내용이 있었다.
Strange autogenerated getter and setter in eclipse
'Programing > JVM(Java, Kotlin)' 카테고리의 다른 글
스프링에서 요청파라메터 처리하기 (0) | 2014.01.07 |
---|---|
2014년 스프링 학습 (목록) (0) | 2014.01.07 |
스프링(Spring)-pom.xml (0) | 2012.11.14 |
[Spring] 의존성관리(dependency management) (0) | 2012.11.12 |
숫자로 된 문자열 0으로 패딩하기... (0) | 2012.11.06 |