新建个项目,建个包叫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
小弟求教,改怎么做?
相关推荐
本文将详细介绍如何利用反射根据类名创建类的实例对象。 一、什么是反射 ---------------- 反射是.NET Framework 中的一个机制,通过反射可以在程序运行时动态地获取程序集的元数据信息,包括类、方法、属性、字段...
反射是指程序在运行时动态获取对象属性与方法的一种机制,即编译器需要将类型信息(属性类型与偏移地址以及成员函数的地址等信息)编译到程序文件中,当程序运行时将这些信息加载到内存中去,做到运行时只根据对象的...
否则,你需要在构建脚本中手动调用moc命令。 3. **获取类信息**:在运行时,你可以使用`QMetaType`来获取类的信息,包括类名。例如,`QMetaType::className(typeId())`可以返回`MyClass`的字符串表示。 4. **动态...
综上所述,通过类名获取类的实例对象在C++中是一种动态类型操作,可能涉及到反射机制的实现、注册-查找表、线程安全、消息传递等多种技术。虽然C++标准库不直接提供这些功能,但我们可以通过宏、模板元编程、RTTI...
本文将详细讲解如何通过反射调用静态方法,并探讨在特定场景下,如MyBatis中的应用。 首先,理解反射的概念是至关重要的。在Java中,反射API(java.lang.reflect)允许我们获取类的信息,包括类名、构造函数、方法...
spring与java反射结合动态定义类及调用函数,实现类的动态定义和函数的动态调用。 为有动态调用的web应用提供一点点借鉴,相互学习。
在这个例子中,我们可以看到一个简单的反射机制示例,演示了如何通过字符串指定类名,并调用类的方法。首先,我们定义了一个名为WriteClassName的类,该类有一个静态方法printClassName,该方法打印出一条消息...
在易语言中,通过反射,我们可以获取类的信息(如类名、方法、属性等),并据此创建对象或调用方法,增强了代码的灵活性。 3. **插件系统**:动态类名常用于构建插件系统。开发者可以编写符合特定接口的类,并在...
在Java编程中,"通过类名调用不同的实体类"是一种常见的需求,特别是在设计灵活、可扩展的系统时。传统的做法是使用`Class.forName()`方法动态加载类,但这种方法需要处理字符串与类名的对应,增加了代码的耦合度。...
// 获取到RED枚举实例 ``` 5. **枚举的构造函数**:枚举类默认是final且私有的,所以不能通过常规方式实例化新的枚举值。但反射可以访问私有构造函数,尽管不推荐这样做,因为这违反了枚举的设计原则。 在"test-...
在解决方案资源管理器或代码编辑器中,可以通过输入部分类名、关键词或使用`Ctrl+.`(在Windows/Linux系统)或`Cmd+.`(在macOS系统)快捷键来跳转到相应的命名空间。一旦到达正确的命名空间,所有在这个命名空间下...
Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性使得Java程序具有了高度的灵活性和动态性,尤其在框架开发、插件系统...
在Java中,`java.lang.Class`类和相关的API提供了反射的功能,允许我们动态地创建对象、获取类的信息(如类名、方法、字段)、调用方法和访问字段。在.NET框架中,对应的类是`System.Type`,提供了类似的反射功能。 ...
要创建一个类,我们使用关键字"class",然后是类名,如下面所示: ```php class MyClass { public $property; public function myMethod() { // 方法的代码 } } ``` 要实例化这个类,我们使用`new`关键字,...
Java反射调用是Java语言提供的一种强大的动态类型机制,它允许程序在运行时检查并使用类的信息,包括类的方法、属性以及构造器等。在Java中,反射是通过`java.lang.reflect`包中的类实现的,如`Class`、`Constructor...
Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个资源“java反射调用实例代码”提供了关于如何使用Java反射API进行各种...
`invoke()`方法则是`Method`类的一个方法,用于调用获取到的方法,传入对象实例和参数列表,可以执行方法并获取返回值。 例如,如果我们有一个私有方法`private void secretMethod(int arg)`,我们可以通过以下方式...
通过获取类名并实例化相应的Java类,DWR可以将接收到的JSON或XML数据转换为相应的Java对象。 2. **私有方法调用**:某些情况下,可能需要调用服务器端类的私有方法。通过反射,DWR可以绕过访问控制,直接调用这些...
当你在程序运行时获取到一个类的`Class`对象,你就可以获取该类的所有信息,包括类名、构造器、方法、字段等。这通常通过`Class.forName()`方法完成,传入类的全限定名即可。 在提供的"ReflectDemo"中,可能包含...
反射机制允许程序在运行时动态地获取类的信息(如类名、方法名、参数类型等),并能动态调用方法或访问和修改对象的属性。这种能力在处理未知类型的数据、实现元编程、插件系统、框架设计等方面有着广泛的应用。 1....