2017-02-01 10 views
0

私の関数から動的戻り型のようなものが必要です。この時点で私のコードのようです:Javaジェネリックによる動的戻り型

@Repository 
public class SswltDataDAO { 

    private static final Logger logger = LoggerFactory.getLogger(SswltDataDAO.class); 
    private JdbcTemplate jdbcTemplate; 

    @Autowired 
    @Qualifier("dataSource_sswlt") 
    public void setDataSource(DataSource dataSource) { 
     this.jdbcTemplate = new JdbcTemplate(dataSource); 
    } 

    public List<Object> getSswltData(String tableName, String sql, Class className) { 
     List<Object> listOfOblects = null; 
     try{ 
      listOfOblects = jdbcTemplate.query(sql, new BeanPropertyRowMapper(className)); 
     }catch(Exception e){ 
      logger.error("\n\nException while importing data from "+tableName+":\n", e); 
      listOfOblects = null; 
      e.printStackTrace(); 
     } 

     return listOfOblects; 
    } 

} 

そして、これは、メソッドの使い方です:dataImportFromSswltToIwproImp()

私は方法getSswltDataを(書きたいジェネリックを使用し
Class MainService { 
    public boolean dataImportFromSswltToIwproImp() { 
     ....... 

     List<Object> list = sswltDataDAO.getSswltData("tbl_sswltdata_addresses", "select * from tbl_sswltdata_addresses", SswltdataAddresses.class); 

     .........; 
    } 
} 

)というし、このような方法で、 List<Object>を返すと、List<class name>つまりオブジェクトクラスオブジェクトではなくクラスタイプオブジェクトのリストを動的に返す必要があります。 「クラス名」はgetSswltData()の呼び出し中に渡されるクラスであり、これはコードの動的部分になります。

まだ可能であるかどうか不思議ですか?私はすべての提案が歓迎されるように私のコードの任意の部分を変更するのに十分柔軟です。可能性の署名については

答えて

2

<T> List<T> getSswltData(String tableName, String sql, Class<T> className) 

あなたがパラメータとして渡されたクラスのインスタンスのリストでは、戻り値を定義する方法。

内部的には、jdbcTemplate.query(sql, new BeanPropertyRowMapper(className));List<Object>を返すと思うので、内部的にはキャスト/コンバージョンを実行する必要があります。 List<T>実際にList<T>を取得した場合は、生タイプListにキャストしようとする可能性があります。そのうちList<T>にキャストしようとしますが、返された要素が見つからない場合は、バグを見つけにくいかもしれないことに注意する必要があります。渡されたクラスにマッチする。

+0

ありがとうございました。この行自体をどのようにキャストするのだろうかというだけのことです:listOfObjects = jdbcTemplate.query(sql、new BeanPropertyRowMapper(className));私はこの行にどのような変更を加える必要がありますか? – Shashank

+0

基本的に 'listOfObjects =(List)...' - しかし最後の文で私が提供した警告をお読みください。 – Thomas

関連する問題