Jér*_*nge 23 java reflection boxing primitive-types
让我们假设一个人检索Field使用反射的声明类型.
以下哪项测试将正确表明是否正在处理一个int或一个Integer?
Field f = ...
Class<?> c = f.getDeclaringClass();
boolean isInteger;
isInteger = c.equals(Integer.class);
isInteger = c.equals(Integer.TYPE);
isInteger = c.equals(int.class);
isInteger = ( c == Integer.class);
isInteger = ( c == Integer.TYPE);
isInteger = ( c == int.class);
Run Code Online (Sandbox Code Playgroud)
Jér*_*nge 30
基于Field.getType()(而不是f.getDeclaringClass()),我得到以下内容:
Type: java.lang.Integer
equals(Integer.class): true
equals(int.class) : false
equals(Integer.TYPE) : false
== (Integer.class) : true
== (int.class) : false
== (Integer.TYPE) : false
Type: int
equals(Integer.class): false
equals(int.class) : true
equals(Integer.TYPE) : true
== (Integer.class) : false
== (int.class) : true
== (Integer.TYPE) : true
Type: java.lang.Object
equals(Integer.class): false
equals(int.class) : false
equals(Integer.TYPE) : false
== (Integer.class) : false
== (int.class) : false
== (Integer.TYPE) : false
Run Code Online (Sandbox Code Playgroud)
含义如下:
Integer.TYPE.equals(int.class)
Integer.TYPE == int.class
Run Code Online (Sandbox Code Playgroud)
这意味着如果我想知道我是在处理一个int还是一个Integer,我可以使用以下任何一个测试:
isInteger = c.equals(Integer.class) || c.equals(Integer.TYPE);
isInteger = c.equals(Integer.class) || c.equals(int.class);
isInteger = (c == Integer.class) || (c == Integer.TYPE);
isInteger = (c == Integer.class) || (c == int.class );
Run Code Online (Sandbox Code Playgroud)
我错过了一个角落案例吗?如果是,请发表评论.
Pau*_*ora 23
int.class汇编到Integer.TYPE.但是,我认为您使用Field.getDeclaringClass()不正确,因为它返回Class表示声明该字段的类的对象.你想要使用的是Field.getType().
| 归档时间: |
|
| 查看次数: |
30079 次 |
| 最近记录: |