この春ブートアプリケーションのインターフェイスを実装する別のクラスのリストを処理するためのスマートな解決策は何ですか?

AndreaNobili:

Javaの春ブートアプリケーションに取り組んで私は、次のような問題を見つけていますし、私の問題を解決することができるパターンを存在するかどうかは知りません。

私は細部の私の状況を説明しようとするとどのように私は(現時点では具体的な結果に)この状況を解決しようとしています。

私は名前のこのDTOクラス持っExcelTrendTabGeneralDTOを

public class ExcelTrendTabGeneralDTO {

    private String excelDocumentName;
    private String excelTabName;

    private List<ExcelTabInterface> tabTrendList;

    public ExcelTrendTabGeneralDTO() {
        super();
    }

    public ExcelTrendTabGeneralDTO(String excelDocumentName, String excelTabName,
            List<ExcelTabInterface> tabTrendList) {
        super();
        this.excelDocumentName = excelDocumentName;
        this.excelTabName = excelTabName;
        this.tabTrendList = tabTrendList;
    }

    .............................................................
    .............................................................
    .............................................................
    GETTER AND SETTER METHODS
    .............................................................
    .............................................................
    .............................................................
}

このクラスでは私の問題の核心があります。あなたが見ることができるように、このフィールドが含まれています。

    private List<ExcelTabInterface> tabTrendList;

これは、現時点では、私は空のインターフェイスとして定義します:

public interface ExcelTabInterface {

}

それはのリストですExcelTabInterface(今私はなぜ、私は何をしようとしています説明し、インタフェースです)。初めに代わり、このExcelTabInterface私は特定の具体的なタイプ(クラス)を持っていたが、このリストは、このインタフェースを実装するクラスのオブジェクトインスタンスの異なる種類が含まれている可能性があるため、私はインターフェイスでそれを置き換える(これは私のアイデアでした)。

だから、例えば私は(という名前のこのようなクラスだったCompVibrAndTempDTOを):

@Description(value = "DTO for the \"Vibration Monitore\" Excel tab")
public class CompVibrAndTempDTO extends ExcelTabAbstractDTO implements ExcelTabInterface {
    private String tempReadingPointA;
    private String tempReadingPointB;
    private String tempReadingPointC;

    ....................................................................
    ....................................................................
    ....................................................................
    CONSTRUCTOR AND GETTER AND SETTER METHODS
    ....................................................................
    ....................................................................
    ....................................................................
}

[OK]を...アイデアは(私は私のIDEでの構文エラーを持っていない)動作するようです。

そして、ここでの問題:私は持っているリポジトリ使用するクラスJdbcTemplateを私のデータベースにクエリを実行するために:

@Repository
public class ExcelRepositoryImpl implements ExcelRepository{

    @Autowired
     private JdbcTemplate jdbcTemplate;

    @Override
    //public List<CompVibrAndTempDTO> findCompVibrAndTempTab() {
    public List<ExcelTabInterface> findCompVibrAndTempTab() {

        String SELECT_COMP_VIBR_AND_TEMP_TAB = "SELECT * FROM TREND006";

        List<ExcelTabInterface> resultList = jdbcTemplate.query(SELECT_COMP_VIBR_AND_TEMP_TAB, new CompVibrAndTempMapper());

        return resultList;

    }

}

だから、私は私の実装しているオブジェクトのリスト取得を期待してSQLクエリを行っております見ることができるようにExcelTabInterfaceのインターフェイスを。問題は、私はという名前のカスタムマッパークラス使用し、これらのオブジェクト構築することであるCompVibrAndTempMapper春実装RowMapperのインターフェイスを。

だから、これは私のカスタムマッパークラスであります:

public class CompVibrAndTempMapper implements RowMapper<ExcelTabInterface>{

    @Override
    public CompVibrAndTempDTO mapRow(ResultSet rs, int rowNum) throws SQLException {
        ExcelTabInterface compVibrAndTempDto = new CompVibrAndTempDTO();

        SimpleDateFormat formatDateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        SimpleDateFormat formatDate = new SimpleDateFormat("dd/MM/yyyy");
        SimpleDateFormat formatTime = new SimpleDateFormat("HH:mm:ss");

        String dateStr = null;
        String timeStr = null;

        String dateFromDB = rs.getString("Time_Stamp");

        try {
            Date date = formatDateTime.parse(dateFromDB);
            dateStr = formatDate.format(date);
            timeStr = formatTime.format(date);      
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        compVibrAndTempDto.setDate(dateStr);
        compVibrAndTempDto.setTime(timeStr);
        compVibrAndTempDto.setTempReadingPointA(rs.getString("Sensor464DV"));
        compVibrAndTempDto.setTempReadingPointB(rs.getString("Sensor465DV"));
        compVibrAndTempDto.setTempReadingPointC(rs.getString("Sensor466DV"));
        ..........................................................................
        ..........................................................................
        ..........................................................................
        return compVibrAndTempDto;
    }

}

そしてここで私は私の問題を抱えています。問題は、これらの方法は、(空である)私のインタフェースで定義されていないので、それは私のsetterメソッドでエラーを与えるということです。

[OK]を私は私の具体的なDTOのためにこれらのsetterメソッドを挿入することができ、私はこのエラーを解決します!しかし、これは部分的に私のDTOクラスを一般化する私の努力を無効になります。

私は私の実装他のDTOクラスがあるのでExcelTabInterfaceの私はすべてにそれぞれのDTOのすべてのメソッドを宣言する必要があります>ので-インターフェイスを- >私は私のインターフェイスにも、これらの他ののDTOクラスのgetterメソッドとsetterメソッドを挿入する必要がありますので、実装のDTOクラスExcelTabInterfaceのインターフェイスを。

理論Iの事で解決策は、私がで宣言する必要があることをすべてのメソッドを実装することができることをExcelTabInterfaceの私が使用していないことmnethodsをすべての私のDTOクラスのインターフェイスとメソッド「何もしない」として実装するが、それは私はかなりAに思えます混乱。

についてどう思いますか?実行可能な解決策になるか、それは地獄のように醜いですもらえますか?このthaのようないくつかのパターンか何かが滑らかな印象の方法で、私のproblemaを解決するために存在しますか?

報酬:

そして、なぜあなたは定義しません

ExcelTabInterface compVibrAndTempDto = new CompVibrAndTempDTO();

ちょうど使用

CompVibrAndTempDTO compVibrAndTempDto = new CompVibrAndTempDTO();

あなたはここに具体的なクラスを必要とし、あなたは1を持っています。

    new RowMapper<ExcelTabInterface>() {
        @Override
        public ExcelTabInterface mapRow(ResultSet rs, int rowNum) throws SQLException {
            CompVibrAndTempDTO compVibrAndTempDTO = new CompVibrAndTempDTO();
            compVibrAndTempDTO.setvalue("value");
            return compVibrAndTempDTO ;
        }
    };

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=318717&siteId=1