하나의 필드가 다른 필드의 하위 집합이고 상위 집합 클래스의 getter가 모두 예기치 않게 (getFoo()
)이라는 클래스 쌍이 있습니다. 어떤 방법으로 효율적으로 슈퍼 세트 클래스에서 하위 집합 클래스로 모든 일반적인 필드를 복사하거나 적어도 그렇게하려면 코드를 자동 생성하십시오. 나는 상위 클래스를 편집 할 수 없습니다, 여러 가지 이유로Java의 비슷한 클래스간에 필드 복사
- 를,도 그냥 데이터 복사를 할 것을 피하기 위해 전반에 걸쳐 사용할 수 있습니다 :
나는 점에 유의해야한다.
- 잠재적으로 하위 집합 클래스에서 새 메서드를 만들 수 있지만 필드를 변경할 수는 없습니다.
- 우리는 이러한 수십 개의 쌍을 가지고 있으며, 일부 클래스는 많은 필드가 있으므로 일부러 손으로 직접하는 것은 다루기가 쉽지 않습니다.
- 동료는 자바 리플렉션을 사용하여 두 클래스를 가져 와서 필드를 문자열로 반복하고 문자열 조작을 통해 getter 이름을 확인한 다음 자동 실행되도록 일반 복사 방법을 만드는 방법을 고안했습니다 부분 집합 클래스의 필드 그것은 끔찍하지만 작동하는 것 같습니다. 더 좋은 방법이 있기를 정말로 바라고 있습니다.
편집 : 요청
public class SuperClass {
private int foo;
private int bar;
private float bat;
public int getFoo() { return foo; }
public int getBar() { return bar; }
public float getBat() { return bat; }
}
public class SubClass {
private int foo;
private float bat;
}
//wanted
public static copySuperFieldsToSubMethod(Object super, Object sub) { ??? }
// also acceptable would be some way to autogenerate all the assignment
// functions needed
수퍼 세트 클래스를 편집 할 수 있다면 간단히 서브 세트 클래스를 확장하고 클래식 OO 방식으로 모든 필드와 메소드를 상속 할 수 있습니다. 왜 수퍼 클래스를 편집 할 수 없습니까? – Asaph
@Asaph - 슬프게도, 수퍼 셋 클래스는 개별적으로 개발 된 외부 라이브러리의 일부이며 이제는 더 큰 클래스의 정보를 많이 활용하지 않는이 특정 프로젝트 용 클래스로 변환 할 수 있어야합니다. . – Dusty
관계를 뒤집어서 하위 집합 클래스가 수퍼 클래스에서 상속 된 경우 어떻게해야합니까? 빈 몸체가 필요하지 않은 필드와 관련된 모든 메서드를 재정의 할 수 있습니다. 너무 우아한 것은 아니지만 적어도 복사/붙여 넣기, 반사 또는 코드 생성없이 코드를 다시 사용할 수 있습니다. – Asaph