我想使用带有反射的 NdefRecord 实例化 NdefMessage。下面是一个真正应该工作但不能工作的简单代码片段:
// getting Ndef Message Class OK
Class<?> ndefMessageClass = Class.forName("android.nfc.NdefMessage");
//getting NdefRecord class OK
Class<?> ndefRecordClass = Class.forName("android.nfc.NdefRecord");
//getting ArrayOf NdefRecord
Object[] ndefRecords = (Object[])Array.newInstance(ndefRecordClass, 1)
//filling the new Array
//I'm shure I get an Correct NdefRecord, but dont wanna mess the Code here
ndefRecords[0] = getNdefRecord()
//getting the constructor OK
Constructor<?> const = ndefMessageClass.getConstructor(ndefRecords.class)
//initialization fails here
Object myNdefMessage = const.newInstance(ndefRecords)
//same with this
Object ndefMessage = const.newInstance(Arrays.asList(args).toArray());
我绝对不会想到这会如何失败,得到以下错误消息:
04-16 15:38:42.113: W/System.err(13360): java.lang.IllegalArgumentException: 参数 1 应该有 android.nfc.NdefRecord[] 类型,得到 android.nfc.NdefRecord
所以我得到了正确识别的构造函数。如果我尝试这样得到它:
Constructor<?> const = ndefMessageClass.getConstructor(ndefRecords[0].getClass())
我明白了
04-16 15:44:59.621: W/System.err(14033): java.lang.NoSuchMethodException: [class android.nfc.NdefRecord]
在调试时,它向我展示了一切正确。我可以访问我的数组的索引。为什么地狱java告诉我ndefRecords属于NdefRecords类而不是NdefRecords []?