如何在APEX中内省变量的类?

bar*_*own 5 dynamic salesforce apex-code

我想在运行时知道变量/属性的类.例如:

Integer i = 5;

//pseudo-code
if (i.className == 'Integer') {
    System.debug('This is an integer.');
} else {
    System.debug('This is not an integer, but a ' + i.className);
}
Run Code Online (Sandbox Code Playgroud)

我找不到在文档中返回类类型的方法/属性(假设它在那里).我错过了吗?

Ada*_*dam 9

p.Apex开发人员指南中的122个:

如果您需要在运行时验证对象是否实际上是特定类的实例,请使用instanceof关键字...

但是,您不能instanceof在其子类的实例上使用该关键字,否则您将收到编译错误.例如:

Integer i = 0;
System.debug(i instanceof Integer);

>> COMPILE ERROR: Operation instanceof is always true since an instance of Integer is always an instance of Integer.
Run Code Online (Sandbox Code Playgroud)

您只需要在超类上使用instanceof关键字.例如:

System.debug((Object)i instanceof Integer);

>> true
Run Code Online (Sandbox Code Playgroud)

如果您需要有关类本身类型的信息,请检查System.Type方法(当前Apex开发人员指南第396页.以下是一些示例:

Type integerType;
integerType = Type.forName('Integer');
integerType = Integer.class;
Run Code Online (Sandbox Code Playgroud)


Phi*_*l R 9

今天早些时候有人问过我.这是一个更动态的解决方案.

MyClass mine     = new MyClass();
String myStr     = String.valueOf(mine);
String className = myStr.split(':')[0];
System.assertEquals('MyClass', className);
Run Code Online (Sandbox Code Playgroud)