请问Java怎么取得一个对象的泛型类型?
比如下面这个方法:publicvoidprintType(Objectobject){if(objectinstanceofList){if(????/**object是...
比如下面这个方法:
public void printType(Object object){
if(object instanceof List){
if(????/**object是List<String>类型的**/){
System.out.println("object是List<String>类型");
}else{
System.out.println("object是List,但是不是List<String>类型");
}
}else{
System.out.println("object不是List类型");
}
}
问号的地方我该怎么写呢? object instanceof List<String>这样我试过了,这是不行的,编译器会报错的,也不能((List)object).get(0).getClass()这样通过里面的元素的类型来判断,因为object这个List可能元素个数为0,而且元素的类型可能是List泛型的子类,并不一定就是泛型的类型。 展开
public void printType(Object object){
if(object instanceof List){
if(????/**object是List<String>类型的**/){
System.out.println("object是List<String>类型");
}else{
System.out.println("object是List,但是不是List<String>类型");
}
}else{
System.out.println("object不是List类型");
}
}
问号的地方我该怎么写呢? object instanceof List<String>这样我试过了,这是不行的,编译器会报错的,也不能((List)object).get(0).getClass()这样通过里面的元素的类型来判断,因为object这个List可能元素个数为0,而且元素的类型可能是List泛型的子类,并不一定就是泛型的类型。 展开
3个回答
展开全部
//泛型并没有想象中那那么强力……
//换句话说就是里面什么都能放
//判断这个列表是什么类型的并没有意义
import java.util.ArrayList;
import java.util.List;
public class Main{
public static void printType(Object object){
if(object instanceof List){
List list=(List)object;//什么都能放
list.add(new Main());
if(!list.isEmpty()){
for(Object o:list)
System.out.println(o.getClass().getSimpleName());
//System.out.println("object是List<String>类型");
}else{
System.out.println("object是List,但是不是List<String>类型");
}
}else{
System.out.println("object不是List类型");
}
}
public static void main(String[] args){
List<String> list=new ArrayList<String>();
list.add("haha");
list.add("what?");
printType(list);
}
}
//换句话说就是里面什么都能放
//判断这个列表是什么类型的并没有意义
import java.util.ArrayList;
import java.util.List;
public class Main{
public static void printType(Object object){
if(object instanceof List){
List list=(List)object;//什么都能放
list.add(new Main());
if(!list.isEmpty()){
for(Object o:list)
System.out.println(o.getClass().getSimpleName());
//System.out.println("object是List<String>类型");
}else{
System.out.println("object是List,但是不是List<String>类型");
}
}else{
System.out.println("object不是List类型");
}
}
public static void main(String[] args){
List<String> list=new ArrayList<String>();
list.add("haha");
list.add("what?");
printType(list);
}
}
追问
但是当object是类的成员变量时,用反射Field里的getGenericType()方法,是可以取得object的泛型类型的,这个是什么原理呢?为什么当object为类的成员变量时,能取得它的泛型类型,而当object为其它类型的变量时,就取得不了它的泛型类型了?具体是什么原理呢?
追答
太深奥了……
Field得到的是静态常量
public static final Comparator CASE_INSENSITIVE_ORDER = new CaseInsensitiveComparator();
因为String里面有Comparator类型的常量,所以它能得到泛型类型
主要可能是,对象不知道自己是怎么被声明的,不知道是不有泛型
但是能知道自己内部声明了什么变量
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询