2014-05-14 6 views
0

조언을 주거나 따르는 방법에 대한 힌트를 제공해 줄 수 있습니까? POJO에서 BankHistoryData라고 할 수 있습니다. 두 테이블의 데이터를이 POJO (주 테이블 - 은행 및 그 아카이브 - BankArchive)로 복사하고 싶습니다. 테이블에는 기본적으로 같은 필드가 많으므로 내 자신을 반복하고 싶지는 않습니다.
내가 주위에 인터넷 검색 및 Java 범용 생성자가 나를 도울 수있는 도구를 발견했다. 그러나 나는 제네릭에 조금 익숙하고 정확히 어떻게해야할지 모르겠습니다.
나는 이런 식으로 뭔가를해야한다고 가정일반 복사 생성자를 Java에서 수행하는 방법

public class BankHistoryData<T extends Serializable> { 
    // I would like to set this fields from the object T 
    private field1; 
    private field2; 
    // and many more ... 

    T a; // source object from which to copy values 
    public BankHistoryData(T a) { 
     this.a = a; 
     copyData(); 
    } 

    // NOT SURE ABOUT THIS ... something like this 
    public void copyData() { 
     if(T instanceof Bank) { 
     this.field1 = ((Bank)a).getSomeField(); 
     // and so on ... 
     } else if (T instanceof BankArchive) { 
     this.field1 = ((BankArchive)a).getSomeField(); 
     // and so on ... 
     } else { 
     trow new IllegalArgumentException("Not supported table"); 
     } 
    } 
} 

어떤 제안을 환영합니다. 감사!

mismas

[편집] 나는 곳을 위해 내가 @ 알렉스에서 해당 2 센트를 생각하는,이에 대한 일반적인 사용하지 않기로 결정했다 . 대신 비즈니스 논리 서비스 계층에서이 복사 로직을 수행 할 것입니다 (POJO는 "어리석은"상태로 유지 될 것입니다).
공용 인터페이스를 구현하기 위해이 두 개의 최대 절전 모드 객체를 만들 겠지만 (공유 필드의 getter 메소드 만이 여기에 있습니다.) 마지막으로 비즈니스 로직 서비스 계층에서 복사 메소드를 만들고 필드 복사를 위해 해당 인터페이스 매개 변수를 사용하도록합니다.
희망이 있으면 도움이 될 것입니다. 또한 모든 의견을 환영합니다.
건배!

답변

1

방금 ​​예를 들어, 슈퍼 인터페이스를 만들 수 IBankDataBankBankArchive 모두 해당 인터페이스를 구현하고 인터페이스를 전달합니까? 그냥 내 2 센트 - - 당신이 정말로 은행/BankArchive에 따라 일부 특정 로직이있는 경우

, 당신은

public class MyClass<T extends IBankData> { 

    public void copyData(T instance) { 
     T.getFieldXXX() // this would work because T extends IBankData 

     if (T instanceof Bank) { 
      ((Bank) T).getBankSpecificField(); 
     } 
    } 
} 

BTW을 할 수있는 잘 설계된 구조로, 당신은 일반적으로하지 않는 한 instanceof 할 필요가 없습니다 논리적 인 파사드/디스 패칭 클래스에서.

+0

내 생각은 정확하게. 그러나 Bank and BankArchive가 수정할 수 있는지 확실하지 않습니다. – renz

+0

Bank와 BankArchive가 Hibernate 객체라고 언급하지 않았습니다. 따라서이 인터페이스에 무엇을 넣을 지 모르겠습니다. (getters and setters?) P.s 나는 그들을 어느 정도 수정할 수 있습니다 ... – mismas

+0

@mismas 예, 어떤 일반적인 getter와 setter는 'Bank'와 'BankArchive'간에 공유됩니다. –

1

T는 필수 필드가 있음을 서면으로 보증하지 않습니다.

나는 그것을 바꿀 것 :

public class BankHistoryData<T extends MySpecificInterfaceOrSuperClass> {} 
관련 문제