如何使用Java泛型避免未经检查的强制转换警告

如何使用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

不知怎的,我的老问题结束了,所以我打开了一个新问题:

我正在使用Java泛型实现SQL查询的泛型双向哈希映射。它应该能够前后映射字符串、整数对的任意组合。应该这样使用:

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);