Java中可以通过泛型参数区分类型吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中可以通过泛型参数区分类型吗?相关的知识,希望对你有一定的参考价值。

如果:Object obj = new HashMap<String,Object>或Object obj = new HashMap<String,List<Map<String,Object>>>,那么obj instanseof Map都返回true。

问题:怎么才能知道obj指向的到底是哪种形式的Map(两个Map的泛型参数是不同的)?

参考技术A   是可以通过类型参数区分map的。可以根据map中value的类型参数来区分。

  分析:两个map的value类型是不同的。第一个map是Object类型,第二个是List类型。通过value instanceof List可以区分出是那种形式的map了。
参考技术B 按照你给的例子,key是一样的类型,value前者是object,后者是list,取出具体的value分别判断类型就可以了,必须取出来,因为instance of只认最外面的类型,不能深度判断。本回答被提问者采纳 参考技术C 1、范型参数就是用来预定义和区分类型的。
2、obj instanseof Map改成obj instanceof 具体的map就可以了。实际当中应用时,往往也是具体到哪一类。
试下看吧。

java两个同名一样的,参数类型都是同样的集合类型,但泛型的元素类型不

java两个同名一样的,参数类型都是同样的集合类型,但泛型的元素类型不同,这样的2个方法算是同一方法吗?怎么理解,以参数类型为准吗,不用看泛型类型吗?

是同一个方法,泛型修饰方法是说该方法可用于不同的泛型元素类型,可以看一下泛型的定义追问

哦,谢谢,明白了

参考技术A

错误的写法:

public void methodName(List<String> params) 
  

public void methodName(List<Integer> params) 
  

以上两个方法同时存在一个类里面是会报错的(方法重复了),参数只认类型,与泛型无关,与返回值无关,也就是说把void换成其他的也不行

 

正确的写法:

public void methodName(List<String> params) 
  

public void methodName(Map<String, String) params) 
  

 第一个方法的参数可以任意写,只要不是List且只有一个参数即可。

这叫方法的重载

本回答被提问者采纳
参考技术B 第一个不可能是null,我测试过,还有hashtable是支持泛型的
第二个没错
其实泛型的目的是为了在编译是检测出错误而不是在运行时
list
如果存入非integer类型会出现编译错误
list
如果存入非number类型会出现编译错误
numberlist
是list
类型的,只是指向一个只存有integer类型的arraylist,但是可以存其他类型的数据,只要是number或number子类

以上是关于Java中可以通过泛型参数区分类型吗?的主要内容,如果未能解决你的问题,请参考以下文章

你真的了解JAVA中的泛型E、T、K、V吗?

java两个同名一样的,参数类型都是同样的集合类型,但泛型的元素类型不

JAVA泛型知识点

Java 泛型

Java中的泛型理解

JAVA- 泛型