返回信息流我有一个对象Object a = new ArrayList<String>();如何在运行时通过反射,知道a的类型是ArrayList<String>呢?
这是一条镜像帖。来源:北邮人论坛 / java / #16427同步于 2010/11/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
弱弱的问问
wks
2010/11/19镜像同步13 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
楼主问的应该是如何知道ArrayList里面装的是String
【 在 solonsyd (【国家免检男】) 的大作中提到: 】
: if( a instanceof ArrayList){
: ...
: }
: ...................
Object a = new ArrayList<String>();
if (a instanceof ArrayList) {
ArrayList list = (ArrayList) a;
for (Object obj : list) {
if (obj instanceof String) {
// ....我的天啊,竟然写了这种代码
}
}
}
不过一般构造arraylist的时候就应该知道里面放什么类型呀,运行时捕捉转型异常就好,不明白干嘛还要进行类型判断
如果是“构造的时候应该知道”这种理论的话,那么反射这种机制就整个都没什么用了
如果你是一个库的编写人,你怎么知道能事先知道别人调用的时候给你传入的泛型类里面装的是什么东西
【 在 solonsyd (【国家免检男】) 的大作中提到: 】
: Object a = new ArrayList<String>();
: if (a instanceof ArrayList) {
: ArrayList list = (ArrayList) a;
: ...................
比如我有个对象:
public class ArticleBean {
private List<String> words;
private Map<String, Integer> frequency;
// getters and setters ...
}
如果需要通过反射,构造这个对象,并填充里面的属性,然后填充words和frequency的内容,这样的类型检查是很重要的。
比如:这个对象可以用json表示:
{
"words": ["foo","bar",3,4,5,"baz"],
"frequency": {"foo":1, "bar":2, "baz": "hoho, not acceptable!!!" }
}
如果通过解析json,给对象赋值,在不知道List<String>里面这个String类型参数的时候,有可能真的把"foo","bar","baz"还有3,4,5一个一个地add()到words里面,java在运行时不会出错,完全允许你这样做。
这不是定义了容器中对象的类型了么
【 在 wks (cloverprince) 的大作中提到: 】
: 比如我有个对象:
: public class ArticleBean {
: private List<String> words;
: ...................
for(Object obj : json.words)
{
if(obj.getClass() != String.class)
{
//
}
}
这个可以麼?
额,反射我也似是而非
获得obj(内容已经有值了)的类型很简单。
但是,在MyBean b; b.words==null的情况下,判断出b(这个域,或者属性)的类型,就是有水平了。
【 在 JacKie575 的大作中提到: 】
: for(Object obj : json.words)
: {
: if(obj.getClass() != String.class)
: ...................
【 在 wks 的大作中提到: 】
: 获得obj(内容已经有值了)的类型很简单。
: 但是,在MyBean b; b.words==null的情况下,判断出b(这个域,或者属性)的类型,就是有水平了。
: 【 在 JacKie575 的大作中提到: 】
: ...................
查了下API,java.lang.Class<T>里有个方法。
T cast (Object obj);
obj为null,或有可能转换成T,则返回obj;否则抛出BadCastException;
这个能满意需求不?