请问魅蓝m5 rootnote是几寸的

1400人阅读
技术类(21)
现有一个附加信息对象AttachedInfo,它里面分别有Info01、Info02.....Info10一共十个附加信息字段,现在参数传过来是一个string[]数组,要怎么才能将这个数组中的元素分别对应到这个对象中的各个字段呢,通过反射就可以实现,即使后期AttachedInfo中的Info字段增加,或者说string[]中的元素个数与AttachedInfo中的Info字段个数不一致也没关系。
&&&&&&&&&&&&&&&&&&&&&&& AttachedInfo ai = new AttachedInfo();
&&&&&&&&&&&&&&&&&&&&&&& //通过反射将AttachedInfo中的属性映射成一个属性数组
&&&&&&&&&&&&&&&&&&&&&&& Reflection.PropertyInfo[] propList = typeof(AttachedInfo).GetProperties();
&&&&&&&&&&&&&&&&&&&&&&& //遍历该数组中的属性
&&&&&&&&&&&&&&&&&&&&&&& propList.ToList().ForEach(p =&
&&&&&&&&&&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //将Info开头的属性全都找出来
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& if (p.Name.StartsWith(&Info&))
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //因为属性Info的后两位都是01、02的数字,因此可以去掉前缀Info,以此来对应string[]数组中的元素索引
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& int index = Convert.ToInt32(p.Name.TrimStart('I','n','f','o'));
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //判断索引是否超出了string[]数组
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& if (index &= smr.AttachedInfos.Count())
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //给每个对象中的字段赋值
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& p.SetValue(ai, smr.AttachedInfos[index - 1], null);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& else
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& p.SetValue(ai, null, null);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&&&&&&&&&&& });
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:34252次
排名:千里之外
原创:12篇
转载:13篇
(2)(1)(1)(1)(2)(1)(2)(9)(6)反射赋值数组搞不定。解决思路 - C#当前位置:& &&&反射赋值数组搞不定。解决思路反射赋值数组搞不定。解决思路&&网友分享于:&&浏览:0次反射赋值数组搞不定。&
byte&arrlen=&br.ReadByte();
&&&&&&&&&&&&&&&&&&&&&&&&System.Collections.ArrayList&datas=new&System.Collections.ArrayList();
&&&&&&&&&&&&&&&&&&&&&&&&Type&elementType&=&fi.FieldType.GetElementType();
&&&&&&&&&&&&&&&&&&&&&&&&for&(int&n&=&0;&n&&&&n++)
&&&&&&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&object&d&=&elementType.GetConstructor(new&Type[]&{&}).Invoke(new&object[]&{&});
&&&&&&&&&&&&&&&&&&&&&&&&&&&&System.Reflection.FieldInfo[]&filedinfo1&=&elementType.GetFields();
&&&&&&&&&&&&&&&&&&&&&&&&&&&&deserialize(d,&filedinfo1,&br);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&//d=Convert.ChangeType(d,elementType);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&datas.Add(d);
&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&&&&&fi.SetValue(obj,&datas.ToArray());
最后setvalue&&提示object[]&无法转换成指定的对象数组。&&这个怎么搞呢?------解决思路----------------------改成这么建数据:
Array.CreateInstance(fi.FieldType.GetElementType(),&arrlen);
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有java通过反射获取参数类型后如何类型转换 - ITeye问答
java.lang.ClassCastException
at java.lang.Class.cast(Class.java:2990)
at mand.room.server.Chat.doAction(Chat.java:54)
at kumi.engine.ProtocolThreadManager$DbRunnable.run(ProtocolThreadManager.java:56)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:619)
现在是我通过反射获取一个方法的参数列表中的参数类型
try {
&&& Class&?&[] parameterTypes = m.getParameterTypes();
&&& int i= 0;
&&& Object[] p = new Object[parameterTypes.length];
&&& for(Class&?& c : parameterTypes){
p[i] = c.cast(dd[i+1]);//dd是一个字符串数组,长度为3,后面的值是数字型,我想转换成数字类型,然后供后面方法调用.
&&&&&&& i++;
&&&& }
&&& m.invoke(GMMessageHandler.INSTANCE, p);
&&&
} catch (Exception e) {
&&& e.printStackTrace();
}
请教各位大侠,怎么解决哈
问题补充:qq1988627 写道while (cellbody.hasNext()) {
Cell cell = cellbody.next();
// 这里得到此列的对应的标题
String titleString = (String) titlemap.get(k);
// 如果这一列的标题和类中的某一列的Annotation相同,那么则调用此类的的set方法,进行设值
if (fieldmap.containsKey(titleString)) {
Method setMethod = (Method) fieldmap.get(titleString);
//得到setter方法的参数
Type[] ts = setMethod.getGenericParameterTypes();
//只要一个参数
String xclass = ts[0].toString();
//判断参数类型
if(xclass.equals("class java.lang.String"))
setMethod.invoke(tObject, cell.getStringCellValue());
else if(xclass.equals("class java.util.Date"))
setMethod.invoke(tObject, sf.parse(cell.getStringCellValue()));
else if(xclass.equals("class java.lang.Boolean"))
Boolean boolname=
if(cell.getStringCellValue().equals("否"))
setMethod.invoke(tObject,boolname );
else if(xclass.equals("class java.lang.Integer"))
setMethod.invoke(tObject,new Integer( cell.getStringCellValue()));
else if(xclass.equals("class java.lang.Long"))
setMethod.invoke(tObject,new Long( cell.getStringCellValue()));
我的方法中,参数列表是多种类型的,按照这种方式的话,我要排列组合多少种啊
问题补充:方法参数列表是有多个参数,而且个数是不确定,按照这种方式来处理,要累死了
qq1988627 写道while (cellbody.hasNext()) {
Cell cell = cellbody.next();
// 这里得到此列的对应的标题
String titleString = (String) titlemap.get(k);
// 如果这一列的标题和类中的某一列的Annotation相同,那么则调用此类的的set方法,进行设值
if (fieldmap.containsKey(titleString)) {
Method setMethod = (Method) fieldmap.get(titleString);
//得到setter方法的参数
Type[] ts = setMethod.getGenericParameterTypes();
//只要一个参数
String xclass = ts[0].toString();
//判断参数类型
if(xclass.equals("class java.lang.String"))
setMethod.invoke(tObject, cell.getStringCellValue());
else if(xclass.equals("class java.util.Date"))
setMethod.invoke(tObject, sf.parse(cell.getStringCellValue()));
else if(xclass.equals("class java.lang.Boolean"))
Boolean boolname=
if(cell.getStringCellValue().equals("否"))
setMethod.invoke(tObject,boolname );
else if(xclass.equals("class java.lang.Integer"))
setMethod.invoke(tObject,new Integer( cell.getStringCellValue()));
else if(xclass.equals("class java.lang.Long"))
setMethod.invoke(tObject,new Long( cell.getStringCellValue()));
propertyValue = ConvertUtils.convert(propertyValue, pd.getPropertyType());
p[i] = c.cast(dd[i+1]);//dd是一个字符串数组,长度为3,后面的值是数字型,我想转换成数字类型,然后供后面方法调用.
你这里转型不可能成功,这个规则和直接转型是一样的,类似于下面的代码:
Integer a = 1;
String b = "2";
String s = (String)1;
Integer i = (Integer)b;
后面的转型编译器都无法通过,对象间的转型必须有继承关系,而且向上转型转型一般都可以,但向下则不一定。
貌似不能够直接强转,需要判断
同意楼上,基础类型也没多少
复杂的就更不好搞了
把java数据数据类型都写上 基本差不多啦吧 无非 date long integer float string 等这些 也没多少
while (cellbody.hasNext()) {
Cell cell = cellbody.next();
// 这里得到此列的对应的标题
String titleString = (String) titlemap.get(k);
// 如果这一列的标题和类中的某一列的Annotation相同,那么则调用此类的的set方法,进行设值
if (fieldmap.containsKey(titleString)) {
Method setMethod = (Method) fieldmap.get(titleString);
//得到setter方法的参数
Type[] ts = setMethod.getGenericParameterTypes();
//只要一个参数
String xclass = ts[0].toString();
//判断参数类型
if(xclass.equals("class java.lang.String"))
setMethod.invoke(tObject, cell.getStringCellValue());
else if(xclass.equals("class java.util.Date"))
setMethod.invoke(tObject, sf.parse(cell.getStringCellValue()));
else if(xclass.equals("class java.lang.Boolean"))
Boolean boolname=
if(cell.getStringCellValue().equals("否"))
setMethod.invoke(tObject,boolname );
else if(xclass.equals("class java.lang.Integer"))
setMethod.invoke(tObject,new Integer( cell.getStringCellValue()));
else if(xclass.equals("class java.lang.Long"))
setMethod.invoke(tObject,new Long( cell.getStringCellValue()));
已解决问题
未解决问题6226人阅读
Java(172)
Java反射技术除了可以在运行时动态地决定要创建什么类型的对象,访问哪些成员变量,方法,还可以动态地创建各种不同类型,不同维度的数组。
动态创建数组的步骤如下:
1.创建Class对象,通过forName(String)方法指定数组元素的类型
2.调用Array.newInstance(Class, length_of_array)动态创建数组
访问动态数组元素的方法和通常有所不同,它的格式如下所示,注意该方法返回的是一个Object对象
Array.get(arrayObject, index)
为动态数组元素赋值的方法也和通常的不同,它的格式如下所示, 注意最后的一个参数必须是Object类型
Array.set(arrayObject, index, object)
动态数组Array不单可以创建一维数组,还可以创建多维数组。步骤如下:
1.定义一个整形数组:例如int[] dims= new int{5, 10, 15};指定一个三维数组
2.调用Array.newInstance(Class, dims);创建指定维数的数组
访问多维动态数组的方法和访问一维数组的方式没有什么大的不同,只不过要分多次来获取,每次取出的都是一个Object,直至最后一次,赋值也一样。
动态数组Array可以转化为普通的数组,例如:
Array arry = Array.newInstance(Integer.TYPE,5);
int arrayCast[] = (int[])
以下实例默认已经默认导入Array:import java.lang.reflect.A
【2】示例代码A. 一维数组:
public static void main(String args[]) throws Exception {
Class&?& classType = Class.forName(&java.lang.String&);
// 创建一个长度为10的字符串数组
Object array = Array.newInstance(classType, 10);
// 把索引位置为5的元素设为&hello&
Array.set(array, 5, &hello&);
// 获得索引位置为5的元素的值
String s = (String) Array.get(array, 5);
System.out.println(s);
B. 多维数组:
public static void main(String args[]) {
int[] dims = new int[] { 5, 10, 15 };
// 创建一个具有指定的组件类型和维度的新数组。
Object array = Array.newInstance(Integer.TYPE, dims);
// 取出三维数组的第3行,为一个数组
Object arrayObj = Array.get(array, 3);
Class&?& cls = arrayObj.getClass().getComponentType();
System.out.println(cls);
// 取出第3行的第5列,为一个数组
arrayObj = Array.get(arrayObj, 5);
// 访问第3行第5列的第10个元素,为其赋值37
Array.setInt(arrayObj, 10, 37);
// 动态数组和普通数组的转换:强行转换成对等的数组
int arrayCast[][][] = (int[][][])
System.out.println(arrayCast[3][5][10]);
JAVA 反射创建数组和操作数组的意义
数组是Java编程语言中的对象。与所有对象一样,它们都有类。如果您有一个数组,使用标准 getClass 方法,您可以获得该数组的类,就象任何其它对象一样。但是, 不通过现有的实例来获得类不同于其它类型的对象。即使您有一个数组类,您也不能直接对它进行太多的操作 -- 反射为标准类提供的构造函数接入不能用于数组,而且数组没有任何可接入的字段,只有基本的 java.lang.Object 方法定义用于数组对象。数组的特殊处理使用 java.lang.reflect.Array 类提供的静态方法的集合。该类中的方法使您能够创建新数组,获得数组对象的长度,读和写数组对象的索引值。
下面显示了一种重新调整现有数组大小的有效方法。它使用反射来创建相同类型的新数组,然后在返回新数组之前,在老数组中复制所有数据。
通过反射来扩展一个数组:
public Object growArray(Object array, int size) {
Class type = array.getClass().getComponentType();
Object grown = Array.newInstance(type, size);
System.arraycopy(array, 0, grown, 0,Math.min(Array.getLength(array), size));
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1458964次
积分:17668
积分:17668
排名:第386名
原创:465篇
转载:156篇
评论:139条
阅读:23980
文章:10篇
阅读:11476
(6)(1)(1)(1)(1)(1)(4)(2)(4)(10)(2)(8)(6)(5)(5)(2)(2)(10)(4)(13)(36)(20)(4)(7)(9)(14)(3)(29)(36)(38)(5)(10)(5)(33)(69)(5)(21)(71)(29)(20)(38)(11)(20)

我要回帖

更多关于 魅蓝m5 root 的文章

 

随机推荐