2017-09-28 10 views
1

私はPHPから来て、javaに移動しました。java - 親関数/スコープから子プロパティにアクセスする

多くのデータベースエンティティのCRUD操作を作成するために、クラス/クラスを実装しようとしていますが、私は自分自身(そして皆さん)に質問しています。すべてのエンティティは (親からそれらのほとんど)その機能を継承し、私は、コンパイラの警告を回避するために、親クラスDatabaseEntitytableNameのidFieldNameを実装する必要があります。 javaは親のプロパティ(これは明らかにヌルです)を使用しようとしているようですが、その機能は親に実装されているためです。

この問題を解決する方法はありますか?どんなフィードバックも大いに評価されます!

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上の任意のフィードバックをapreciate :)

答えて

0

あなたがtableNameidFieldNameを参照してくださいreadFromDBする方法は、これら2つのフィールドを使用する場合限り、彼らは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 ; 
    } 
} 
関連する問題