请问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泛型的子类,并不一定就是泛型的类型。
展开
 我来答
水冰天之痕
推荐于2016-03-09 · TA获得超过716个赞
知道小有建树答主
回答量:1254
采纳率:50%
帮助的人:1156万
展开全部
//泛型并没有想象中那那么强力……
//换句话说就是里面什么都能放
//判断这个列表是什么类型的并没有意义

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类型的常量,所以它能得到泛型类型

主要可能是,对象不知道自己是怎么被声明的,不知道是不有泛型
但是能知道自己内部声明了什么变量
辣星获1c
2013-05-23 · TA获得超过620个赞
知道答主
回答量:246
采纳率:100%
帮助的人:63.6万
展开全部
你需要直接传Class哦,java里面是不能取得泛型类型的哦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-05-22
展开全部
instanceof List
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式