2015-01-20 3 views
0

동일한 유형의 객체를 반환하는 메소드에 액세스 할 수있는 POJO가 있습니다 (일반적으로 일부 필드가 채워짐). 이 getter 메소드를 호출하고 반환되는 객체를 참조하도록 POJO의 인스턴스를 설정하는 POJO에 메소드를 구현할 수 있습니까? 내가 만든 모든 POJO에 대해 copy() 함수를 설정하는 것을 피하고 싶습니다. 예를 들어Java : "this"인스턴스를 같은 유형의 객체로 설정합니다.

는 :

public class DAO { 
    public static BaseEntity get(int id) { 
     // returns some POJO 
    } 
} 

public abstract class BaseEntity { 
    public void get(int id) { 
     BaseEntity entity = DAO.get(id); 
     // sets "this" to the entity 
    } 
} 

public class POJO extends BaseEntity { 
    int foo; 
    String bar; 
} 
+0

'설정 했음'과 무슨 상관이 있습니까? BaseEntity를 인스턴스화 할 수 없으므로 어쨌든 'this'가 없습니다. – Stultuske

+0

POJO는 BaseEntity를 확장하므로 필드를 채우기 위해'pojo.get (123)'과 같은 것을 할 수 있기를 원합니다. – user2066880

+0

나는 당신이하려는 것을 이해합니다. 나는 단지 당신의 '어떻게'의 논리를 얻지 못한다. 필자는 인터페이스 (추상 클래스가 아님)와 해당 인터페이스의 (구체적인) 구현을 권장합니다. – Stultuske

답변

2

당신은 this에 할당 할 수 없습니다.

당신은 당신의 get 방법은 새로운 인스턴스를 반환 할 수 있습니다 :

BaseEntity pojo = new POJO(); 
... 
pojo = pojo.get(5); 
+0

나는 이것이 의미가 있음을 알았다. 나에게 이상한 것 같아요'pojo = pojo.get (5)'약간 중복 된 것 같습니다. 만약 내가 단지'pojo.get (5)'를 호출 할 수 있고 객체가 업데이트된다면 그것은 훨씬 더 자연스럽게 보입니다. 내 사고 과정이 맞습니까? – user2066880

+0

첫 번째'새로운 POJO();'는 중복 될 가능성이 있습니다. –

+0

@PeterLawrey 아이디어는 그 인스턴스를 변경하는 인스턴스 메소드를 호출하는 것이 었습니다. (OP가 원하는 것처럼 보이기 때문에) pojo.get (5)를 호출하기 위해서는 초기 인스턴스를 생성해야합니다. 물론 정적 메서드를 직접 호출 할 수 있습니다. – Eran

1

난 그냥 부를 수있는 경우 :

public BaseEntity get(int id) { 
    return DAO.get(id); 
} 

을 다음 할당이 원래 인스턴스의 참조를 인스턴스를 반환 pojo.get (5) 객체가 업데이트되고

당신이 정말로 원하는 것은 단지

BaseEntity pojo = DAO.get(id); 

입니다. 객체에 대한 참조를 변경하는 유일한 방법은 객체를 반환하는 것입니다. 이 경우에는 코드를 더 복잡하게 만드는 것처럼 포장을 시도하는 것입니다.

관련 문제