Saw*_*yer 9 java reflection casting
根据JLS 7,5.1.6缩小参考转换
•从任何阵列类型SC []到任何阵列类型TC [],前提是SC和TC是参考类型,并且从SC到TC有一个缩小的参考转换.
Object[] objArr = {"a","b","c"};
String[] strArr = (String[])objArr; // ClassCastException
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,objArr和strArr都是引用类型,并且从Object到String的引用转换很窄.
Object obj = "a";
String str = (String)obj;
Run Code Online (Sandbox Code Playgroud)
但以下代码工作正常:
Object[] objArr = (Object[])java.lang.reflect.Array.newInstance(String.class, 3);
String[] strArr = (String[])objArr;
Run Code Online (Sandbox Code Playgroud)
我想问一下java使用的规则来进行转换.据我所知,两个例子之间的区别在于,在第一个例子中,objArr是一个Object数组,其组件类型为Object.第二个是Object数组,其组件类型为String.
请注意,我不是要求如何进行转换,不要告诉我如何使用Arrays.copyOf或其他库来执行此操作.
Object[] objArr = {"a","b","c"};
String[] strArr = (String[])objArr;
Run Code Online (Sandbox Code Playgroud)
有了这个问题,{"a","b","c"}这是一个Object不是Strings 的数组.
这就像做以下事情 -
Object obj = new Object();
String str = (String) obj; //ClassCastException
Run Code Online (Sandbox Code Playgroud)
以下情况也不例外 -
Object[] objArr = new String[] {"a","b","c"}; //Which is the case when you are using reflection
String[] strArr = (String[])objArr; //No exception
Run Code Online (Sandbox Code Playgroud)
这就像做以下事情 -
Object obj = new String();
String str = (String) obj;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
735 次 |
| 最近记录: |