求助泛型接口实际类型问题。

vbnet_yan 2019-08-03 12:00:29

Map<String, Object> ccc = new HashMap<String, Object>();
ccc.put("a", "2");
for (Type type : ccc.getClass().getGenericInterfaces()) {
if (type instanceof ParameterizedType) {
Type k = ((ParameterizedType) type).getActualTypeArguments()[0];
Type v = ((ParameterizedType) type).getActualTypeArguments()[1];
System.out.println(k .getTypeName());
System.out.println(v .getTypeName());
}
}

为什么输出K,V 不是输出泛型实际类型?
我把代码改为下面的也不行。

HashMap<String, Object> ccc = new HashMap<String, Object>();
ccc.put("a", "2");
Type type = ccc.getClass().getGenericSuperclass();
if (type instanceof ParameterizedType) {
Type k = ((ParameterizedType) type).getActualTypeArguments()[0];
Type v = ((ParameterizedType) type).getActualTypeArguments()[1];
System.out.println(k.getTypeName());
System.out.println(v.getTypeName());
}

获取ccc的Key Value的实际类型怎样获取?
...全文
159 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
vbnet_yan 2019-08-05
  • 打赏
  • 举报
回复
引用 3 楼 逝水流年风萧兮 的回复:
这个KEY的实际类型你已经设置成String了,它只能装String类型的数据,还用获取什么,除了你的value需要判断而已,除非你定义成Map<Object,Object>,不知道你是否是想要以下的效果,如果不是,那我也没办法,必竟不知道你具体是想怎么做

Map<String,Object> map =new HashMap<String,Object>();
map.put("a", 1);
map.put("b", "Str");
map.put("c", 2L);
map.put("d", 1.5);
for(Map.Entry<String, Object> m:map.entrySet()){
	System.out.println(m.getValue().getClass().getTypeName());
}
其实我想写一个转换类,参数传进来是Object类型,我方法里面需要判断这个Object类型参数 类型是不是Map<String,Object> map
  • 打赏
  • 举报
回复

这个KEY的实际类型你已经设置成String了,它只能装String类型的数据,还用获取什么,除了你的value需要判断而已,除非你定义成Map<Object,Object>,不知道你是否是想要以下的效果,如果不是,那我也没办法,必竟不知道你具体是想怎么做

Map<String,Object> map =new HashMap<String,Object>();
map.put("a", 1);
map.put("b", "Str");
map.put("c", 2L);
map.put("d", 1.5);
for(Map.Entry<String, Object> m:map.entrySet()){
System.out.println(m.getValue().getClass().getTypeName());
}
vbnet_yan 2019-08-05
  • 打赏
  • 举报
回复
引用 1 楼 逝水流年风萧兮 的回复:
感觉没必要,除了Object,类型都已经定好了
我现在想做一个数据转换类,必须获得这个KEY的实际类型才行。
maradona1984 2019-08-05
  • 打赏
  • 举报
回复
引用 4 楼 vbnet_yan 的回复:
[quote=引用 3 楼 逝水流年风萧兮 的回复:] 这个KEY的实际类型你已经设置成String了,它只能装String类型的数据,还用获取什么,除了你的value需要判断而已,除非你定义成Map<Object,Object>,不知道你是否是想要以下的效果,如果不是,那我也没办法,必竟不知道你具体是想怎么做

Map<String,Object> map =new HashMap<String,Object>();
map.put("a", 1);
map.put("b", "Str");
map.put("c", 2L);
map.put("d", 1.5);
for(Map.Entry<String, Object> m:map.entrySet()){
	System.out.println(m.getValue().getClass().getTypeName());
}
其实我想写一个转换类,参数传进来是Object类型,我方法里面需要判断这个Object类型参数 类型是不是Map<String,Object> map [/quote] 那你判断值的类型即可,而不是判断泛型的类型,这个泛型类型就是Object,存什么都可以
  • 打赏
  • 举报
回复
感觉没必要,除了Object,类型都已经定好了

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧