2010-07-27 3 views
1

PHP 배경에서 오는 Java로 인해 많은 문제가 있습니다. 정적 메서드 getById(int id)과 같은 일반 데이터베이스 메서드가 포함 된 부모 클래스 Entity이 있습니다. 문제가 해결되지 않는 순간Java 수퍼 클래스에서 일반 데이터베이스 메소드를 캡슐화 한 다음 하위 클래스에서 호출하면 캐스트가 작동하지 않습니다. HELP

Person p = Person.getById(1); 

, getById(1)Entity 아닌 Person 반환로 : 내가 전화를 할 수 있도록 내 목표는 같은 Person이 클래스의 자녀를하는 것입니다. 결과를 캐스팅 할 수 있지만 일반 메서드 중 하나를 호출 할 때마다 캐스트를 수행하는 것보다 더 좋은 방법이 있어야합니다.

는 PHP에서 내 마지막 줄 무언가 같이 했 :

return new static(..); 

지금까지 내가 말할 수있는, 내가 인해 구체화 제네릭의 부족으로 자바에서이 작업을 수행 할 수없는 이유는 무엇입니까?

도움을 주시면 감사하겠습니다. 이것이 불가능한 것이라면 더 나은 접근 방법에 대한 제안을 기꺼이 받아 들일 것입니다.

답변

0

DAO 패턴을 따르고 싶습니다. 메서드를 저장,로드, 업데이트 등등으로 PersonDao 인터페이스를 디자인하십시오. 구현을 제공하십시오. 지속성 작업은 도메인 클래스가 아닌 DAO에서 수행해야합니다. 비즈니스 로직을 제공합니다 (예 : 처음부터 끝까지 Perso의 전체 이름을 지정하는 등).

당신이 정말로 야심적이라면 모든 DAO가 일반적으로 정의되기 때문에 일반적인 DAO를 정의 할 수 있으며 구현은 매우 간단해야합니다. 구글 주위에 그것에 대해 ...

편집 - 내가 그것을했다 당신

http://www.ibm.com/developerworks/java/library/j-genericdao.html

0

당신은 사람을 반환 Person 클래스에 정적 메서드 getById를 작성해야합니다. 여기서 getById 내부에서 리플렉션을 사용하여 모든 멤버 변수를 설정하고 데이터베이스의 열과 동일해야한다고 가정한다고 가정 할 수 있습니까? 또는 HashMap을 사용하고 거기에 열 값을 저장할 계획입니까?

개체가 특정 멤버로 잘 정의 된 솔루션을 선호하고 Entity 클래스의 추상 메서드를 덮어 쓰면 데이터베이스 레코드를 멤버 변수로 압축 해제 할 수 있습니다. 또한 다른 방법으로 작업하려면 추상적 인 방법이 필요합니다. 이것은 기본적으로 각 클래스가 일관성을 위해 자체 getById 메소드를 정의하도록 요구합니다. 추상화를 통해이를 시행 할 수는 없지만이를 표준으로 유지할 수는 있습니다.

관련 문제