java相当于c#typeof()

时间:2014-03-31 23:45:30

标签: java reflection

我对java很新。说我是一个xml解析器,我从它创建对象。在c#中我喜欢:

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

在我的解析器类中,我需要知道我正在创建哪个对象,这样如果无法进行解析,我就会抛出异常。 如何在jave中做同样的事情?我的意思是我如何接受像typeof(myObject)

这样的论点

我理解每种语言都有自己的做事方式。我在询问java中的方式

2 个答案:

答案 0 :(得分:4)

Java将Class类作为Java类型上任何反射操作的入口点。

  

Class的实例表示一个类中的类和接口   运行Java应用程序

要获取对象的类型(表示为Class对象),可以调用所有引用类型继承的Object#getClass()方法。

  

返回此Object的运行时类。

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

int.class
例如

答案 1 :(得分: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");
    }
}