0 0

如何调用反射的到的类名0

新建个项目,建个包叫mytest,以下所有代码都在该包下
1、Function.java
package mytest;

public class Function {
	
	public static void functiona(char c){
		System.out.println("你输入的是:"+c+",该字母可以在程序中找到");
	}
	
	public static void functionb(char c){
		System.out.println("你输入的是:"+c+",该字母可以在程序中找到");
	}
	
	public static void functionc(char c){
		System.out.println("你输入的是:"+c+",该字母可以在程序中找到");
	}
	
}

2、Test.java
package mytest;

import java.lang.reflect.Method;
import java.util.Scanner;

public class Test {
	public static void main(String[] args) {
		
		Scanner s = new Scanner(System.in);
		System.out.println("请输入一个字母");
		char c = s.nextLine().charAt(0);
		
		/*
		try {
			//包名.类名
			Class cls = Class.forName("mytest.Function");
			System.out.println("类加载成功");
			Method m[] = cls.getDeclaredMethods();
			String p = "\\w+"+c;
			for(Method mo:m){
				//System.out.println(mo.getName());
				if(mo.getName().matches(p)){
					//有没有什么办法使得只要类似这么写:Function.(mo.getName())(c);
					//就可以省去下面的switch分支,而达到switch分支一样的效果
					//这里的mo.getName()就可以动态替换functiona或functionb或functionc
					System.out.println("YES");
				}else{
					System.out.println("NO");
				}
			}
		} catch (ClassNotFoundException e) {
			System.out.println("类加载错误");
			e.printStackTrace();
		}
		*/
		
		/**
		 * switch分支
		 */
		
		switch(c){
			case 'a':
				Function.functiona(c);
				break;
			case 'b':
				Function.functionb(c);
				break;
			case 'c':
				Function.functionc(c);
				break;
			default:
				System.out.println("输入错误");
		}
		
	}
}

问题就如在Test.java里注释那里写的,再重复下:有没有什么办法使得只要类似这么写:Function.(mo.getName())(c);就可以省去下面的switch分支,而达到switch分支一样的效果,就可以让这里的mo.getName()动态替换functiona或functionb或functionc
小弟求教,改怎么做?
2013年5月09日 18:56

1个答案 按时间排序 按投票排序

0 0

采纳的答案

		Scanner s = new Scanner(System.in);
		System.out.println("请输入一个字母");
		char c = s.nextLine().charAt(0);

		try {
			Method m = Function.class.getMethod("function" + c, char.class);
			m.invoke(null, c);
		} catch (NoSuchMethodException e) {
			System.out.println("输入错误");
		}

2013年5月10日 09:54

相关推荐

    详解C# 利用反射根据类名创建类的实例对象

    本文将详细介绍如何利用反射根据类名创建类的实例对象。 一、什么是反射 ---------------- 反射是.NET Framework 中的一个机制,通过反射可以在程序运行时动态地获取程序集的元数据信息,包括类、方法、属性、字段...

    Qt 反射机制实现,通过类名创建对象

    反射是指程序在运行时动态获取对象属性与方法的一种机制,即编译器需要将类型信息(属性类型与偏移地址以及成员函数的地址等信息)编译到程序文件中,当程序运行时将这些信息加载到内存中去,做到运行时只根据对象的...

    qt通过类名动态创建对象

    否则,你需要在构建脚本中手动调用moc命令。 3. **获取类信息**:在运行时,你可以使用`QMetaType`来获取类的信息,包括类名。例如,`QMetaType::className(typeId())`可以返回`MyClass`的字符串表示。 4. **动态...

    通过类名获取类的实例对象

    综上所述,通过类名获取类的实例对象在C++中是一种动态类型操作,可能涉及到反射机制的实现、注册-查找表、线程安全、消息传递等多种技术。虽然C++标准库不直接提供这些功能,但我们可以通过宏、模板元编程、RTTI...

    通过反射调用静态方法

    本文将详细讲解如何通过反射调用静态方法,并探讨在特定场景下,如MyBatis中的应用。 首先,理解反射的概念是至关重要的。在Java中,反射API(java.lang.reflect)允许我们获取类的信息,包括类名、构造函数、方法...

    spring与java反射结合动态定义类及调用函数

    spring与java反射结合动态定义类及调用函数,实现类的动态定义和函数的动态调用。 为有动态调用的web应用提供一点点借鉴,相互学习。

    反射机制例子及反射方法调用

    在这个例子中,我们可以看到一个简单的反射机制示例,演示了如何通过字符串指定类名,并调用类的方法。首先,我们定义了一个名为WriteClassName的类,该类有一个静态方法printClassName,该方法打印出一条消息...

    易语言模块动态类名.rar

    在易语言中,通过反射,我们可以获取类的信息(如类名、方法、属性等),并据此创建对象或调用方法,增强了代码的灵活性。 3. **插件系统**:动态类名常用于构建插件系统。开发者可以编写符合特定接口的类,并在...

    通过类名调用不同的实体类

    在Java编程中,"通过类名调用不同的实体类"是一种常见的需求,特别是在设计灵活、可扩展的系统时。传统的做法是使用`Class.forName()`方法动态加载类,但这种方法需要处理字符串与类名的对应,增加了代码的耦合度。...

    java 通过反射获取枚举类,及枚举类的值,枚举类枚举实例名

    // 获取到RED枚举实例 ``` 5. **枚举的构造函数**:枚举类默认是final且私有的,所以不能通过常规方式实例化新的枚举值。但反射可以访问私有构造函数,尽管不推荐这样做,因为这违反了枚举的设计原则。 在"test-...

    .NET 命名空间类名判断

    在解决方案资源管理器或代码编辑器中,可以通过输入部分类名、关键词或使用`Ctrl+.`(在Windows/Linux系统)或`Cmd+.`(在macOS系统)快捷键来跳转到相应的命名空间。一旦到达正确的命名空间,所有在这个命名空间下...

    Java 反射详解(包含私有方法属性的调用)

    Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性使得Java程序具有了高度的灵活性和动态性,尤其在框架开发、插件系统...

    调用xml 反射 执行

    在Java中,`java.lang.Class`类和相关的API提供了反射的功能,允许我们动态地创建对象、获取类的信息(如类名、方法、字段)、调用方法和访问字段。在.NET框架中,对应的类是`System.Type`,提供了类似的反射功能。 ...

    php使用字符串名称调用类.zip

    要创建一个类,我们使用关键字"class",然后是类名,如下面所示: ```php class MyClass { public $property; public function myMethod() { // 方法的代码 } } ``` 要实例化这个类,我们使用`new`关键字,...

    Java反射调用工具类

    Java反射调用是Java语言提供的一种强大的动态类型机制,它允许程序在运行时检查并使用类的信息,包括类的方法、属性以及构造器等。在Java中,反射是通过`java.lang.reflect`包中的类实现的,如`Class`、`Constructor...

    java反射调用实例代码

    Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个资源“java反射调用实例代码”提供了关于如何使用Java反射API进行各种...

    java反射机制,调用私有方法

    `invoke()`方法则是`Method`类的一个方法,用于调用获取到的方法,传入对象实例和参数列表,可以执行方法并获取返回值。 例如,如果我们有一个私有方法`private void secretMethod(int arg)`,我们可以通过以下方式...

    dwr与反射相结合案例

    通过获取类名并实例化相应的Java类,DWR可以将接收到的JSON或XML数据转换为相应的Java对象。 2. **私有方法调用**:某些情况下,可能需要调用服务器端类的私有方法。通过反射,DWR可以绕过访问控制,直接调用这些...

    JAVA反射机制的入门代码

    当你在程序运行时获取到一个类的`Class`对象,你就可以获取该类的所有信息,包括类名、构造器、方法、字段等。这通常通过`Class.forName()`方法完成,传入类的全限定名即可。 在提供的"ReflectDemo"中,可能包含...

    反射机制反射Dao 反射机制

    反射机制允许程序在运行时动态地获取类的信息(如类名、方法名、参数类型等),并能动态调用方法或访问和修改对象的属性。这种能力在处理未知类型的数据、实现元编程、插件系统、框架设计等方面有着广泛的应用。 1....

Global site tag (gtag.js) - Google Analytics