`
i2534
  • 浏览: 182818 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

可恶的基本类型和包装类型

阅读更多

今天写程序,遇到一个通过调用类的方法改变值的案例,就写了个一个反射方法.

类为A,方法为public void setXXX(int i,float f);

调用方法为

			Class<?> clazz = A.getClass();
			Class<?>[] pts = new Class<?>[newArags.length];
			int index = 0;
			for (Object o : this.newArags) {
				pts[index++] = o.getClass();
			}
			try {
				Method m = clazz.getMethod(this.methodName, pts);
				m.invoke(this.owner, this.oldArgs);
			} catch (IllegalArgumentException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			} catch (InvocationTargetException e) {
				e.printStackTrace();
			} catch (SecurityException e) {
				e.printStackTrace();
			} catch (NoSuchMethodException e) {
				e.printStackTrace();
			}

 其中oldArgs为{1,2.1f},newArgs为{1,1.0f},想法是好,但是结果很是无情:

java.lang.NoSuchMethodException: A.setXXX(java.lang.Integer, java.lang.Float),

难道只能手动的把包装类型转换成基本类型吗?

			for (Object o : this.newArags) {
				Class<?> c = o.getClass();
				if (c == Integer.class) {
					c = int.class;
				} else if(c == Float.class) {
					c = float.class;
				} else if (c == Double.class) {
					c = double.class;
				}
			}

 有知道更好办法的童鞋请告知我,不胜感激

分享到:
评论
9 楼 i2534 2010-06-13  
kjj 写道
自己没弄懂java就说java可恶,这算不算自大,要是你觉得java这个不爽,你完全可以自己弄一个jdk!!

果然这么多年了,大帽子还是无处不在的.你没看懂就算了,java我自问虽然不是很精通,这点还是知道的.我使用不爽抱怨几句还是可以的吧,而且放在这里是为了让将要这样使用的同学注意点而已.没必要上升到这样的高度吧.
8 楼 kjj 2010-06-13  
自己没弄懂java就说java可恶,这算不算自大,要是你觉得java这个不爽,你完全可以自己弄一个jdk!!
7 楼 mp_juan 2010-06-12  
int.class 和Integer.class是不同的
6 楼 i2534 2010-06-12  
谢楼上各位了.因为我这个需求比较简单,所以仅仅用map包装下基本类型和包装类型的对应,使用时获取就可以了.不过楼上的代码还是很不错的,学习了
5 楼 sunson468 2010-06-12  
你把参数都改成对象类就好了啊~~既然都反射了,还在乎这点额外消耗吗?
4 楼 jiopi 2010-06-12  
我的项目也要用到类似的反射调用,因此我写了一个简单的工具类,参数表做了优化自动匹配
http://jiopi.iteye.com/blog/649996
这个是独立版,你可以拿走直接用

因为要和我的项目做更紧密集成,最新版的程序改动比较大,提供了更加友好的API
org.jiopi.framework.CentralConsole 类

public static <T> T objectVariable(Object obj,String variableName,Class<T> returnType);

public static <T> T objectOperate(Object obj,String registerName,Class<T> returnType,Object... args);

public static <T> T objectOperateStrict(Object obj,String registerName,Class<T> returnType,Object[] parameterTypes,Object... args);


obj :对象,可以是一般对象,也可以是类对象,当是类对象时,访问/调用类的静态变量/方法

详细说明参阅
http://jiopi.iteye.com/blog/655032

下载地址:
http://code.google.com/p/ibean/downloads/list
3 楼 jolestar 2010-06-12  
sf 上有个项目 :   ezmorph 是专门做这个的,那个jsonlib里也用了这个库。
它转换的类型比较多。可以看看。
2 楼 i2534 2010-06-11  
xyz20003 写道
参考jbpm4里ReflectUtil的实现,里边自动对原始类型和封装类型进行转换,主要是为了在进行依赖注入时同时支持Boolean,boolean这类的问题。

svn地址:
http://anonsvn.jboss.org/repos/jbpm/jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/ReflectUtil.java

谢了,我大概看了下,他也是转换的,看来java自身的api是没办法自动做到了.他用map是为了更高效.谢了.
1 楼 xyz20003 2010-06-11  
参考jbpm4里ReflectUtil的实现,里边自动对原始类型和封装类型进行转换,主要是为了在进行依赖注入时同时支持Boolean,boolean这类的问题。

svn地址:
http://anonsvn.jboss.org/repos/jbpm/jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/ReflectUtil.java

相关推荐

    可恶的反义词及造句参考.doc

    可恶的反义词及造句参考.doc

    可恶的雾霾作文合集六篇.docx

    在这一系列名为《可恶的雾霾》的作文中,我们看到了作者们对雾霾现象的深刻反思和对生活影响的细致描述。 首先,我们必须理解雾霾的定义及其危害。雾霾是空气中悬浮的细微颗粒物,包括PM2.5和PM10,与水汽混合形成...

    经典C程序设计语言(去掉了可恶的广告)C语言圣经

    - **灵活的数据类型**:支持丰富的数据类型,如基本类型(int、char等)、指针、数组、结构体等,满足不同场景的需求。 ### C语言的基本结构 一个典型的C语言程序通常包含以下几个部分: 1. **预处理指令**:以`#`...

    “可恶”的运算放大器电容负载汇编.pdf

    运算放大器在电路设计中...然而,通过理解这些基本公式,也可以独立计算出防止振荡或过冲所需的R_ISO值,确保电路的稳定性和性能。总的来说,理解并应用这些理论知识对优化运算放大器驱动电容负载的电路设计至关重要。

    iPhone 8 plus 高通版电路图-没有可恶的水印-清晰

    2. 没有可恶的水印:表明发布者提供了无干扰的原始资源,方便用户直接查看和使用。 3. 清晰干净:强调电路图的质量很好,易于阅读和理解。 标签知识点: 1. iPhone 8 Plus:再次强调这是有关iPhone 8 Plus的资源。 ...

    C程序设计语言(第2版·新版)(去掉了可恶的广告)

    3. **全面性**:内容覆盖了C语言的所有基本方面,包括但不限于数据类型、控制结构、函数、数组、指针等。 4. **实践导向**:书中包含了丰富的示例代码,帮助读者通过实际编程加深理解。 5. **去除广告**:新版去除...

    Anti-Cheat Toolkit 2.2.1.7z

    涵盖所有基本类型和少数专用于Unity的类型。 检测作弊尝试。 视频教程 模糊的预制件 用自动迁移、加密和其他受到支持的类型替换PlayerPrefs。 可以选择将所有保存的数据锁定至设备。 包括篡改检测! 备有适用于...

    英语复习资料 很可恶的

    在英语学习过程中,掌握词汇和表达方式是至关重要的。下面是一些填空练习题,旨在帮助考生巩固语法和短语的应用。 1. 当她知道他要解除婚约时,脸上显露出失望的神色。此处应填入动词短语“came over”,表示表情或...

    C程序设计语言(第2版·新版)(去掉了可恶的广告)官方题解

    C程序设计语言(第2版·新版)(去掉了可恶的广告)官方题解

    可恶的反义词及造句参考精选.doc

    6. **打开/关闭** - 对于用户界面和应用程序,这是基本的控制指令。 例:点击文件菜单,选择“关闭”选项,可以结束当前文档的编辑。 掌握反义词不仅有助于提高IT文档的清晰度,也有利于在团队交流、客户沟通以及...

    可恶的音乐家作文.doc

    由于标签为“范文”,我们可以从中提取一些写作技巧和故事构建的知识点。 1. **故事叙述**:文章通过四个部分,讲述了作者与家人如何处理空调洞中的小鸟的趣事,展现了生动的情节和人物对话,使读者能够感受到故事...

    幼儿园新冠疫情教案可恶的病毒我不怕宣贯.pdf

    这篇幼儿园新冠疫情教案的核心是帮助孩子们理解冠状病毒的基本知识,了解其危害,传播途径,并教授他们有效的预防措施。以下是详细的知识点解析: 1. **冠状病毒的基本特征**:冠状病毒因其表面的突起形状类似花冠...

    C程序设计语言(第2版·新版)(去掉了可恶的广告).pdf )

    下面通过一个简单的“Hello, World”示例程序来了解C语言的基本结构和语法规则: ```c #include int main() { printf("Hello, World\n"); return 0; } ``` 1. **预处理指令**:`#include &lt;stdio.h&gt;`,这条指令...

    课件】幼儿园-可恶的病毒我不怕.pdf

    专业

    英语 5000个必备基本单词

    ### 英语5000个必备基本单词及其解释全英文 #### 1. abase (v.) - **定义**:使某人在地位、评价等方面降低;贬低。 - **例句**:He was abased by the company's decision to overlook him for promotion. #### 2...

    “可恶”的运算放大器电容负载

    然而,电容负载可能会带来一些问题,如振荡和过冲,因此被称为“可恶”的电容负载。本文主要讨论了如何处理运算放大器驱动电容负载时遇到的挑战。 首先,当运算放大器需要驱动一个电容负载(CLOAD)时,如图1所示,...

    可恶的ie8提示缺少id未定义

    这个问题的标题 "可恶的ie8提示缺少id未定义" 描述了一个开发者在IE8浏览器上遇到的典型错误,该错误在其他现代浏览器中并未出现。问题的描述中提到,开发者在页面中动态创建`&lt;select&gt;`元素并填充数据,这些数据来自...

Global site tag (gtag.js) - Google Analytics