SqlOutParameter out = new SqlOutParameter("out_refcursor",OracleTypes.CURSOR
,new StudentRowMapper());
//一些代码...
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
类型安全:从对象到列表的未选中强制转换
我知道这只是一个编译时警告,当然我可以做一个SuppressWarnings(“unchecked”)
来抑制它。
问题:但我如何正确地施放它呢?
>
我尝试的一种方法是
List<Student> students = castObject( result.get("out_refcursor"));
@SuppressWarnings("unchecked")
private static <T extends List<?>> T castObject(Object obj){
return (T)obj;
}
不过,我还是必须在castObject()方法中放入SuppressWarnings(“unchecked”)。我不知道这样做是否正确。
我尝试的第二种方法是,
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;
}
欢迎提出任何建议/建议。
您的第二个解决方案不会有帮助(由于类型擦除),而且还会导致其他问题,因此可能不是一个好主意。
第一种方法可能在实践中有效,但实际上有点不可靠。在泛型类型子类化和在Java中子类化它们的参数之间有一个微妙(但巨大)的区别-即ArrayList
因此,在我看来,您应该将强制转换保持在那里,保留(必要的)注释,并捕获类CastException,以确保覆盖例外情况(因此得名)。
只要您知道List
元素的类名,这样的东西就可以工作。这里的一个问题是硬编码的ArrayList
实例化。
public static <T> List<T> castList(Object obj, Class<T> clazz)
{
List<T> result = new ArrayList<T>();
if(obj instanceof List<?>)
{
for (Object o : (List<?>) obj)
{
result.add(clazz.cast(o));
}
return result;
}
return null;
}
用法:
List<Student> students = castList(result.get("out_refcursor"), Student.class);
下面是程序的一部分,它将ArrayList从服务器发送到客户端。我想删除关于此代码最后一行的警告: 客户端代码: MyVariable是一个具有一些属性的Java类。服务器正在创建一个ArrayList并用MyVariable变量作为项目填充它。然后它将完整的列表发送给客户端。 我想知道为什么我在那里有一个警告,以及如何完美地编码以获得0个警告。如果可能,我希望避免使用“@SuppressWarn
我有这样一种方法,将结果强制转换到(列表),但我的eclipse仍然在抱怨!类型安全:未选中从列表到列表的强制转换
我有一个通用类。它看起来像这样: 显然,conevertdatajsonstring方法仅在字符串类型为T时调用。但有一个警告: 类型安全:未选中从字符串转换为T 有没有一种方法可以在不使用SuppressWarnings的情况下解决此问题: @抑制警告(“未选中”) 方法之前?
我的代码:-文件1。JAVA File2.java(catlisting_xpath元素的XPATH) 错误:- JAVAlang.ClassCastException:类组织。openqa。硒。遥远的RemoteWebElement不能转换为java类。util。列表(org.openqa.selenium.remote.RemoteWebElement位于加载器“app”的未命名模块中;jav
问题内容: 我尝试将一个对象强制转换为我的Action类,但是会导致警告: 感谢您的任何帮助 问题答案: 是的- 这是类型擦除的自然结果。如果确实是if 的实例,则强制转换不会捕获该实例-您只会在尝试使用它时才看到问题,传入a 而不是字符串。 您可以使用以下方法消除警告: 作为功能注释,但您不能轻松地解决潜在的问题:(
对API控制器的远程调用(通过RestTemboard)(从一侧返回已知对象的List([]),从远程侧返回未知类型的对象)返回