use*_*460 0 java variables class instanceof
注意:我不是在询问可以使用哪些类型来存储类名,也不是要求使用解决方法来存储类名,例如反射或使用Strings.这也不是询问如何使用instanceof运算符的问题.
考虑这个例子:
A a = new A();
Class c1 = A.class;
System.out.println(a instanceof c1); //Does not Work
Class c2 = A.class.getClass();
System.out.println(a instanceof c2); //Does not Work
class A{}
Run Code Online (Sandbox Code Playgroud)
我知道上面的代码会失败.但我很好奇是否可以存储一个类,以便它可以像我正在键入类名本身一样工作.
System.out.println(a instanceof A); //This will work
Run Code Online (Sandbox Code Playgroud)
我们可以保留(类)A一些变量,xx以便这可以工作吗?
System.out.println(a instanceof xx);
Run Code Online (Sandbox Code Playgroud)
我的问题是:是否可以存储A一个变量,以便编译器将该变量看作是看到它A?
注意:我不是在问如何存储A的对象.我在问是否可以存储A本身.
您无法使用instanceof运营商.第二个操作数instanceof 必须是类名,它不能是任意表达式,特别是它不能是变量.
语法规定语法为instanceof:
RelationalExpression:
RelationalExpression instanceof ReferenceType
Run Code Online (Sandbox Code Playgroud)
并且ReferenceType只能是类或接口的名称,数组类型或类型变量(不是普通变量).因此,由于(当前)语法的基本限制,使用哪种类型来声明您无法实现所需的变量并不重要.
也instanceof有在执行一些检查,编译时间,因此,它必须能够确定要作为第二个操作数要使用哪种类型在编译时间,但使用表达式将允许动态改变该类型在运行时.
但是您可以使用动态等效isInstance方法,方法:
System.out.println(c1.isInstance(a));
Run Code Online (Sandbox Code Playgroud)
文档明确地说:
确定指定的Object是否与此Class表示的对象分配兼容.此方法是Java语言
instanceof运算符的动态等效项.
| 归档时间: |
|
| 查看次数: |
46 次 |
| 最近记录: |