如何使用Java泛型避免未经检查的强制转换警告
不知怎的,我的老问题结束了,所以我打开了一个新问题: 我正在使用Java泛型实现SQL查询的泛型双向哈希映射。它应该能够前后映射字符串、整数对的任意组合。应该这样使用:如何使用Java泛型避免未经检查的强制转换警告,java,generics,casting,unchecked,Java,Generics,Casting,Unchecked,不知怎的,我的老问题结束了,所以我打开了一个新问题: 我正在使用Java泛型实现SQL查询的泛型双向哈希映射。它应该能够前后映射字符串、整数对的任意组合。应该这样使用: String sql = "SELECT string_val, int_val FROM map_table"; PickMap<String, Integer> pm1 = new PickMap<String, Integer>(sql); String key1 = "seven"; Integ
String sql = "SELECT string_val, int_val FROM map_table";
PickMap<String, Integer> pm1 = new PickMap<String, Integer>(sql);
String key1 = "seven";
Integer value1 = pm1.getLeft2Right(key1);
Integer key2 = 7;
String value2 = pm1.getRightToLeft(key2);
String sql=“从映射表中选择字符串值、整数值”;
PickMap pm1=新的PickMap(sql);
字符串key1=“七”;
整数值1=pm1.getLeft2Right(键1);
整数key2=7;
字符串值2=pm1.getRightToLeft(键2);
当然,它应该可以创建一个pm(整数,整数)等等
我的Pick Map实现如下所示(没有getter…):
公共类PickMap{
private final HashMap left2Right=new HashMap();
private final HashMap right2Left=new HashMap();
公共PickMap(字符串sql)抛出OException{
DTable d=新的DTable(sql);
int colTypeL=d.t.getColType(1);
int colTypeR=d.t.getColType(2);
提取器extLeft=(提取器)getInstance(colTypeL);
提取器extRight=(提取器)getInstance(colTypeR);
int numRows=d.t.getNumRows();
对于(int i=1;i,可以使用以下注释使编译器不输出这些警告:
@SuppressWarnings("unchecked")
请看这篇涉及相同问题的文章。这里的答案将解释您需要知道的一切。您会收到警告,因为无法证明您所做的是安全的。您假设getInstance(colTypeL)
将返回一个提取器
——但在编译时或执行时都无法验证该提取器
您可以像其他人提到的那样使用@SuppressWarnings(“unchecked”)
,但我会尝试重新考虑一下设计。如果您使用的是Spring框架,您可以使用CastUtils:
import static org.springframework.data.util.CastUtils.cast;
是的,是的,我理解你的观点。我想使用泛型类型L来实例化我的提取器。因此,我不想在getInstance方法中使用“colType”,而是想做一些类似getInstance(L)和getInstance(R)的事情…这可能吗?我讨厌压制警告!@Sauer:你必须在执行时知道L
和R
,这通常意味着拥有class1类型的构造函数参数一种可能是让构造函数获取它需要的提取器:PickMap(字符串sql,提取器
import static org.springframework.data.util.CastUtils.cast;
obj.setString(cast(someObject));
String bob = cast(someObject);