2013-07-31 3 views
1

키 값의 목록으로 기본 필드 (메서드 없음) 만있는 클래스의 값을 가져 오는 경우 리플렉션 (동적 반복 사용) 또는 HashMap을 반환하는 특정 메서드를 사용 하시겠습니까? 당신은 무엇을 선호합니까? 이 순간클래스에서 값 가져 오기 : 맞춤 메소드 또는 리플렉션?

가 오십 개 클래스 정도이지만 아마도 미래에 그들이 (정권에) 다른 2-30로 성장할 수

나는 반사를 좋아하지만이 경우에는 아마 필요가 없다?

+1

클래스를 수정할 수 없으며이 필드가 '비공개'로 표시되었으므로이 질문을한다고 가정합니다. –

+0

안녕하세요, 필드는 public으로 표시되어 있지만 이러한 클래스의 모든 키 - 값을 가져 오기 위해 일반 파서를 작성해야합니다. – mrddter

답변

2

반영 기반 접근 방식은 클래스가 추가 메서드를 구현할 필요가 없기 때문에 더 깨끗합니다. 새 필드가 기존 클래스에 추가 될 때 이러한 메서드를 유지 관리하지 않아도됩니다.

HashMap 기반 접근 방식은 반사 기반 호출에서 반환되도록 래핑 된 것과 같은 방식으로 프리미티브를지도에 삽입 할 객체에 래핑해야하기 때문에 성능 측면에서 많은 것을 얻지 못합니다.

+0

반사가 더 깨끗하고 유지 보수가 잘된다고 생각하지만 왜 객체에 랩이 필요한가? 나는 다음과 같이 HashMap을 채울 수있다 : HashMap hm = new HashMap(); hm.put ("field1", 10d); hm.put ("field2", 10f); hm.put ("field3", 'a'); hm.put ("field4", (long) 100); ... 맞습니까? 비슷한 공연을 했니? – mrddter

+0

@mrddter'hm.put ("field1", 10d)'를 호출 할 수있는 이유는 [autoboxing]입니다. (http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html) : Java 컴파일러가 값을 래핑합니다. 이 기능은 Java 5에서 유형이 지워진 제네릭을 사용할 수 있도록 추가되었습니다. – dasblinkenlight

+0

그것을 받으세요! 처음에 오토 박싱이 나왔을 때 나는 의문 스러웠다. 오토 박싱은 반사와 비슷한 성능을 보 였는가? 어느 쪽이 더 좋은지 결정하기에 좋은 포인트입니다. – mrddter

관련 문제