2014-03-31 101 views
2

的我很新到Java。说我有一个XML解析器,我会从它创建对象。在C#中我会做这样的:相当于Java C#的typeof()

parser p = new parser(typeof(myTargetObjectType)); 

在我的解析器类,我需要知道哪个对象我做,这样我可以抛出异常,如果解析是不可能的。 如何做Java里一样吗?我的意思是我怎么能接受参数一样typeof(myObject)


我明白每一种语言都有它自己的做事方式。我问什么是Java中的方式

+0

查找到'Class'对象。 –

回答

4

Java有Class类作为切入点,对Java类型的任何反射操作。类Class

实例表示 类和接口上运行的Java应用程序

要得到一个对象,表示为Class对象的类型,你可以调用所有继承Object#getClass()方法参考类型。

返回此Object的运行时类。

您无法使用原始类型执行此操作(调用getClass())。但是,原语类型也具有相关联的Class对象。你可以做

int.class 

例如。

1
public class Main { 
    public static void main(String[] args) { 
    UnsupportedClass myObject = new UnsupportedClass(); 
    Parser parser = new Parser(myObject.getClass()); 
    } 
} 

class Parser { 
    public Parser(Class<?> objectType) { 
    if (UnsupportedClass.class.isAssignableFrom(objectType)) { 
      throw new UnsupportedOperationException("Objects of type UnsupportedClass are not allowed"); 
    } 
    } 
} 

class UnsupportedClass {} 

或者因为你有对象的实例,这是比较容易:

Parser parser = new Parser(myObject); 

public Parser(Object object) { 
    if (object instanceof UnsupportedClass) { 
      throw new UnsupportedOperationException("Objects of type UnsupportedClass are not allowed"); 
    } 
}