2015-06-19 140 views
0

我有一个小问题。我写了一个函数,该函数应该为对象列表生成表(它可以是日期或自定义的或其中的一个)。这个函数的参数是“List list”和“List headings”。所以,这里是一个问题,为什么是这条线获取对象的实例?

if (value.getClass().isInstance(Date.class) ... 

不执行,即使你当我打印value.getClass()是说:类java.util.Date。还有一个问题,如何检查“值”是List?非常感谢提前:)

下面是部分代码:

for (Object o : list) { 

    List<String> atributes = new ArrayList<String>(); 

    for (java.lang.reflect.Field field :o.getClass().getDeclaredFields()) { 
     field.setAccessible(true); 
     Object value = field.get(o); 
     if (value != null) { 
      if (value.getClass().isInstance(Date.class)) { 
       atributes.add(convertDateToString((java.util.Date) value)); 
      } 
      atributes.add(value.toString()); 
     } 
     } ... 
+0

当你说该行没有执行时,你是什么意思?你的意思是它总是返回错误? – ApproachingDarknessFish

+0

是啊,对不起表情抱歉:) –

+0

因为Date.class不是Date的一个实例。 – immibis

回答

3

你滥用Class#isInstance,返回true,如果Date.classvalue.getClass()一个实例:

确定指定的对象是赋值兼容与由此类表示的对象。此方法是Java语言instanceof运算符的动态等效项。如果指定的Object参数非空并且可以转换为由此Class对象表示的引用类型而不引发ClassCastException,则该方法返回true。否则返回false。

相反,你想要么:

if(value instanceof Date) 

if(Date.class.isInstance(value)) 
+0

非常感谢:) –

+0

@HansJohanbach没问题,随时标记复选标记,如果你相信这个答案完全帮助你。 – hexafraction

0

value.getClass().isInstance(Date.class)询问是否Date.class这是Class类型是一个类的实例,它是分配兼容之类的value。那是false,除非valueClassObject的一个实例。

使用运营商instanceof代替:

if (value instanceof Date) … 
3

正确的方法来检查,如果一个对象是一些类的实例就是用 “的instanceof” 语句。

所以,你应该这样做:

if (value instanceof Date) { 
    atributes.add(convertDateToString((java.util.Date) value)); 
} 

希望这会帮助你。

相关问题