2017-09-28 2 views
1

나는 PHP에서오고 자바로 옮겼다. 다음과 같이 someting을 구현하는 방법이 있다면 스스로에게 물어볼 것입니다.자바 - 부모 함수/범위에서 자식 속성에 액세스

많은 데이터베이스 엔티티에 대해 CRUD 작업을 생성하려면 클래스/클래스를 구현하려고합니다. 모든 개체는 내가 컴파일러 경고를 피하기 위해 상위 클래스 DatabaseEntityTABLENAMEidFieldName를 구현해야 그 기능 (부모로부터 대부분)을 상속합니다. java가 부모 프로퍼티 (분명히 null 임)를 사용하려고한다.

이 문제를 극복하는 방법이 있습니까? 모든 의견은 크게 평가됩니다!

abstract class DatabaseEntity { 

    protected String tableName; 
    protected String idFieldName; 

    public DataRecord readFromDB(int recordID) throws SQLException { 

     ... 
     String sqlStatement = String.format("SELECT * FROM %s WHERE %s = %s", this.tableName, this.idFieldName, recordID); // Exception shows this line 
     ... 
    } 
} 

class DatabaseRecord extends DatabaseEntity { 

    protected String tableName = "DatabaseRecordTable"; 
    protected String idFieldName = "ID"; 

    public void getRecord() { 

     ... 
     DataRecord record = this.readFromDB(1); // leads to java.lang.NullPointerException: null 
     ... 
    } 
} 

면책 조항 : 나는 GitHub의 새로운 그리고 난 내 게시물 : improoving에 대한 의견을 뵙죠

당신이있는 당신이 tableNameidFieldName,이 두 필드를 참조하는 방법 readFromDB를 사용

답변

0

만큼 그들은 initailized하지 않는 한 null을 유지 시도는 추상 클래스에서 필드를 제거하고 같은 것을해야 할 일 :

abstract class DatabaseEntity { 

    // protected String tableName; 
    // protected String idFieldName; 

    public abstract String getTableName(); 



    public abstract String getIdFieldName() ; 

    public DataRecord readFromDB(int recordID) throws SQLException { 

     ... 
     String sqlStatement = String.format("SELECT * FROM %s WHERE %s = %s",getTableName(), getIdFieldName(), recordID); 
     ... 
    } 
} 

과를 구현은 다음과 같습니다 :

 class DatabaseRecord extends DatabaseEntity { 

    protected String tableName = "DatabaseRecordTable"; 
    protected String idFieldName = "ID"; 

    public void getRecord() throws SQLException { 


     DataRecord record = this.readFromDB(1); 

    } 

    @Override 
    public String getTableName() { 
     return this.tableName; 
    } 

    @Override 
    public String getIdFieldName() { 
     return this.idFieldName ; 
    } 
} 
관련 문제