SqlOutParameter out = new SqlOutParameter("out_refcursor",OracleTypes.CURSOR,new StudentRowMapper());
//一些代碼..類型安全:未選中從Object強制列出
MapSqlParameterSource parameters = createMapSqlParameterSource();
parameters.addValue("in_studentid","101");
Map<String, Object> result = simpleJdbcCall.execute(parameters);
List<Student> students = (List<Student>) result.get("out_refcursor"); // here I get a warning
定義方法:
Map<String, Object> org.springframework.jdbc.core.simple.SimpleJdbcCall.execute(SqlParameterSource parameterSource)
「執行存儲過程並返回地圖輸出參數,如參數聲明中的名稱所示。「
上述行上的警告:List<Student> students = (List<Student>) result.get("out_refcursor");
是「類型安全:未選中從Object強制轉換成List」
我明白這只是一個編譯時警告,並Offcourse我可以做一個@SuppressWarnings("unchecked")
來說,攔截它。
問題:但我該如何正確施放它?我嘗試了
一種方法是
List<Student> students = castObject(result.get("out_refcursor"));
@SuppressWarnings("unchecked") private static <T extends List<?>> T castObject(Object obj){ return (T)obj; }
不過我不得不把@SuppressWarnings("unchecked")
在castObject()方法。我不知道這是否是正確的做法。
方式二我試圖,
List<?> students = castObject(result.get("out_refcursor"));
Student student = (Student)students.get(0); private static <T extends List<?>> List<?> castObject(Object obj){ if(obj instanceof List<?>) { return (List<Student>)obj; } return null; }
任何建議/意見是受歡迎的。
如果您知道返回的值是'名單',你的罰款。 –
第一種方法是罰款,如果你知道它將永遠返回列表如果你不確定它會返回什麼,你應該使用你的第三種方法... –
brso05
我知道它總是會返回列表',所以它很乾淨編碼把@SupressWarnings(「unchecked」)在那種情況下?第三種方法也會避免警告,但我覺得代碼太多 –
spiderman