`
topbox163
  • 浏览: 52847 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

反射 reflect 根据方法名得到方法,并根据不同的数据类型参数和不同的返回值类型

阅读更多

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class RefMethod {
private String uid;
private String uname;

public RefMethod() {
super();
}

public RefMethod(String uid, String uname) {
super();
this.uid = uid;
this.uname = uname;
}

public String getUid() {
return uid;
}

public void setUid(String uid) {
this.uid = uid;
}

public String getUname() {
return uname;
}

public void setUname(String uname) {
this.uname = uname;
}

public static Object reflect(Object obj, String methodName, Class[] argumentsType, Object[] argumentsValue){
try {
Class myClass = obj.getClass();
Method method = myClass.getMethod(methodName, argumentsType);
Object resultValue = method.invoke(obj, argumentsValue);
return resultValue;
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return null;
}
public  void testOne(){
System.out.println("testOne方法:无参数无返回值");
}
public  Double testFour(){
System.out.print("testFour方法:无参数有返回值:");
return 33.00;
}
public void testTwo(Integer x){ //这是包装类型
System.out.println("testTwo方法:有参数无返回值:"+"\t"+x);
}
public String testThree(String x){ //这是包装类型
return "testThree方法:有参数有返回值:"+"\t"+x;
}
public String testFive(String x,Integer y, Date d, Double e, Float f, Timestamp ts){ //这是包装类型
return "testFive方法:多个参数有返回值:"+"\t"+x+"\t"+y+"\t"+d+"\t"+e+"\t"+f+"\t"+ts;
}
public void testSix(int x){
System.out.println("testSix方法:一个基本数据类型参数无返回值:"+"\t"+x);
}
public RefMethod testSeven(RefMethod obj){
System.out.print("testSeven方法:一个自定义数据类型参数有返回值:"+"\t"+obj.getUid()+"\t"+obj.getUname()+"\t");
return obj;
}

public void testEight(List<RefMethod> listObj){
for (RefMethod obj : listObj) {
System.out.println("testEight方法:一个List 范型参数无返回值:"+"\t"+obj.getUid()+"\t"+obj.getUname()+"\t");
}
}
public void testNine(List listObj){
for (Object obj : listObj) {
RefMethod rf = (RefMethod) obj;
System.out.println("testNine方法:一个List数据类型参数无返回值:"+"\t"+rf.getUid()+"\t"+rf.getUname()+"\t");
}
}
public void testTen(Map map){
Set keys = map.keySet();
for (Object k : keys) {
String myKey = (String) k;
System.out.println("testTen方法:一个Map数据类型参数无返回值:"+"\t"+map.get(myKey));
}
}
public static void main(String[] args) {

Object resultValue = null;
List li = new ArrayList();
li.add(new RefMethod("001","JAVA"));
li.add(new RefMethod("002","J2EE"));
li.add(new RefMethod("003","JSP"));
Map rmMap = new HashMap();
rmMap.put("上海", "属于中国");
rmMap.put("号百", "属于电信");
rmMap.put("彩铃", "属于中国电信");
// RefMethod.reflect(new RefMethod(),"testOne",new Class[]{},new Object[]{});
// RefMethod.reflect(new RefMethod(),"testTwo",new Class[]{new Integer(0).getClass()},new Object[]{new Integer(56)});
// resultValue = RefMethod.reflect(new RefMethod(),"testThree",new Class[]{new String().getClass()},new Object[]{new String("计算机软件")});
// resultValue = RefMethod.reflect(new RefMethod(),"testFour",new Class[]{},new Object[]{});

/* resultValue = RefMethod.reflect(new RefMethod(),
"testFive",
new Class[]{
new String().getClass(),
new Integer(0).getClass(),
new Date().getClass(),
new Double(0).getClass(),
new Float(0).getClass(),
new Timestamp(0).getClass()},
new Object[]{
new String("String类型"),
new Integer(100000),
new Date(),
new Double(20.00),
new Float(50.0),
new Timestamp(System.currentTimeMillis())});*/

// resultValue = RefMethod.reflect(new RefMethod(),"testSix",new Class[]{int.class},new Object[]{44});

/*RefMethod obj = new RefMethod();
obj.setUid("10010");
obj.setUname("上海电信");
RefMethod resultObj = (RefMethod) RefMethod.reflect(new RefMethod(),"testSeven",new Class[]{RefMethod.class},new Object[]{obj});
System.out.println("返回结果:"+resultObj.getUid()+"\t"+resultObj.getUname());*/

// RefMethod.reflect(new RefMethod(),"testEight",new Class[]{List.class},new Object[]{li});
// RefMethod.reflect(new RefMethod(),"testNine",new Class[]{List.class},new Object[]{li});
RefMethod.reflect(new RefMethod(),"testTen",new Class[]{Map.class},new Object[]{rmMap});



System.out.println("返回结果:"+resultValue);


}
}
分享到:
评论

相关推荐

    C++ reflect 反射

    这里,我们遍历了`MyClass`的`metaobject`的成员,如果成员是函数,我们就将其转换为`std::reflect::member_function`类型,并可以进一步检查其名称和参数,以确定是否是目标方法。 在实际应用中,我们可能还需要...

    9.3 Java反射reflect

    获取到`Method`对象后,可以调用`invoke()`方法来执行对应的方法,传递参数并获得返回值。这对于调用私有方法或者在不明确知道方法名称的情况下调用方法非常有用。 4. **Field类**:`Field`类代表类的字段(属性)...

    java 反射得到某个方法

    在标题“java 反射得到某个方法”中,我们将探讨如何使用Java反射API来获取并执行类中的特定方法。 首先,我们需要导入Java反射相关的类,主要来自`java.lang.reflect`包,包括`Class`、`Method`和`Invocation...

    检测函数返回值类型的简单程序.rar

    在Java编程语言中,函数是实现特定功能的代码块,它们可以接受参数并返回值。在Java中,每个函数都有一个预定义的返回类型,它决定了函数执行后能够返回的数据类型。这个压缩包"检测函数返回值类型的简单程序.rar...

    Java获取代码中方法参数名信息的方法

    尽管可以获取到方法的其他元数据,如方法名、返回类型、参数类型等,但参数名在默认情况下并未包含在编译后的字节码中。这是因为参数名被视为调试信息,通常不被视为运行时必要的部分。 Java 8引入了一个新的特性,...

    用反射解析jar文件并执行里面Java代码

    在Java编程语言中,反射(Reflection)是一种强大的工具,它允许程序在运行时检查和操作类、接口、字段以及方法等对象。通过反射,我们可以在不知道具体类名的情况下实例化对象,调用方法,访问和修改私有成员,以及...

    jdk源码方法注释及实现

    1. **方法注释**:在JDK源码中,大部分类和方法都有详尽的JavaDoc注释,这些注释提供了关于类的功能、方法的作用以及参数和返回值的解释。例如,`java.util.ArrayList`中的`add()`方法就有详细的注释,描述了它如何...

    基于Go语言的学习笔记(附代码)

    本学习笔记主要涵盖了Go语言的基础知识,包括类型、表达式、函数、数据结构、方法、接口、并发以及包管理等多个方面,并附带了源码分析和附录中的工具、调试和测试等内容。 一、类型 1. 变量:Go语言中的变量需要...

    良葛格Java JDK 5.0学习笔记ch05

    泛型可以应用于类、接口和方法,通过指定参数类型,可以避免强制类型转换,并减少运行时错误。例如,ArrayList就是泛型类,T代表任意类型,可以在创建实例时指定具体类型,如ArrayList。 二、枚举类型 在JDK 5.0...

    Java基础总结

    1. **通过`Class.forName()`方法**:此方法需要传递类的全限定名作为参数,返回值为`Class`类型的对象。 ```java Class c1 = Class.forName("com.example.Employee"); ``` 2. **通过类名的`.class`属性**:这种...

    JDKAPI中文版.rar

    6. **反射**:java.lang.reflect包提供了反射API,允许程序在运行时检查类、接口、构造器和方法的信息,并动态调用方法或创建对象。 7. **异常处理**:Java的异常处理机制通过try-catch-finally语句块来捕获和处理...

    JavaAPI文档中文版

    在使用Java API文档中文版时,开发者可以根据类名、方法名或关键词搜索所需信息,查看参数类型、返回值、异常抛出以及方法的详细描述,辅助编写代码。对于初学者来说,深入理解并熟练运用Java API是掌握Java编程的...

    jdk文档jdk文档jdk文档jdk文档jdk文档jdk文档jdk文档

    通过CHM文件,开发者可以迅速定位到所需的类、方法或接口,查看其详细说明、参数、返回值、异常和示例代码。 总之,理解并熟练运用JDK文档是每个Java开发者必备的技能。无论你是初学者还是经验丰富的开发者,都应该...

    详解java.lang.reflect.Modifier.isInterface()方法

    `java.lang.reflect`包是Java反射API的一部分,它允许程序在运行时检查类、接口、字段和方法的元数据。`Modifier`类就是这个包中的一员,它提供了一种方便的方式来处理和解释这些元数据中的访问修饰符,如`public`, ...

    golang-china读书笔记

    - **reflect.Type和reflect.Value**: 介绍这两个反射API的基本用法。 - **示例**: 通过具体的例子来说明反射的应用场景。 #### 底层编程 - **底层类型**: 如`unsafe.Sizeof`, `Alignof`和`Offsetof`,用于底层内存...

    GolangStudy.rar

    Go语言的函数可以接收可变参数,支持多返回值,还有匿名函数和函数指针。特别地,Go语言引入了闭包,使得函数可以访问并修改其外部作用域的变量。 四、并发编程 4.1 Goroutine Go语言的核心特性之一是并发编程,...

    Go 学习笔记 第三版

    在数据类型方面,Go语言支持多种数据结构,包括基础类型如整型、浮点型、布尔型、字符串,以及复合类型如数组、切片(slice)、映射(map)、结构体(struct)等。Go的切片是一个灵活的数组结构,支持动态扩展,而结构体...

    JDK1.6 API帮助文档.CHM.7z

    java.lang.reflect包提供了反射API,允许在运行时检查类、接口、构造器和方法的信息,并能动态调用方法和访问字段。这对于编写通用代码、插件系统和单元测试非常有用。 八、I/O流的NIO(Non-blocking I/O) JDK1.6...

Global site tag (gtag.js) - Google Analytics