如何调用反射的到的类名

问题描述

新建个项目,建个包叫mytest,以下所有代码都在该包下1、Function.javapackage 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.javapackage 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或functioncSystem.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小弟求教,改怎么做?

解决方案

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("输入错误");}

时间: 2024-08-03 08:02:26

如何调用反射的到的类名的相关文章

java反射 在只知道类名的情况下怎么能反射出对象?

问题描述 比如只知道类名是UserInfo的情况下怎么能通过反射得到UserInfo的对象呢?UserInfo类的完全限定名是user.UserInfo. 解决方案 解决方案二:Class.forname("user.UserInfo").newInstance();解决方案三:不可以,只有得到完全限定名才可以解决方案四:这个就比较难了,恐怕得扫描所有包了.

Java反射机制(四):动态代理

一.静态代理 在开始去学习反射实现的动态代理前,我们先需要了解代理设计模式,那何为代理呢? 代理模式: 为其他对象提供一种代理,以控制对这个对象的访问. 先看一张代理模式的结构图: 简单的理解代理设计: 一个操作接口有两个子类,其中一个真实主题的实现类,另一个是代理类,代理实现类要完成比真实主题实现类更多的内容,而且本身还需要处理一些与具体业务有关的程序代码. 静态代理示例: package org.chen.yuan.prox; interface Subject {     public S

WF4.0基础篇 (二十六) Interop调用WF3.X的Activity

本文例子说明 Interop调用WF3.X的Activity 类名 System.Activities.Statements.Interop 文件 System.Workflow.Runtime.dll 结构说明 继承 NativeActivity, ICustomTypeDescriptor 是一个 sealed类 override 了 [CacheMetadata方法] 与 [Cancel方法] 与[Execute方法] override 了 [CanInduceIdle属性] [Activ

destoon实现调用当前栏目分类及子分类和三级分类的方法_php实例

调用当前栏目分类及子分类和三级分类是程序设计里常用的方法,本文就来详细讲述destoon实现调用当前栏目分类及子分类和三级分类的方法.具体操作如下: 在destoon中提供了如下的调用语句: 一级分类名: {$m[catname]} 二级分类名: {$c[catname]} 三级分类名: {$b[catname]} 具体调用示例如下: 一.直接调用分类名称和链接: {loop $maincat $i $m}<dl> {php $child = get_maincat($maincat, $CA

.net中 关于反射的详细介绍_实用技巧

概述反射• 通过反射可以提供类型信息,从而使得我们开发人员在运行时能够利用这些信息构造和使用对象. • 反射机制允许程序在执行过程中动态地添加各种功能.   运行时类型标识 •运行时类型标识(RTTI),可以在程序执行期间判定对象类型.例如使用它能够确切地知道基类引用指向了什么类型对象.•运行时类型标识,能预先测试某个强制类型转换操作,能否成功,从而避免无效的强制类型转换异常. •在c#中有三个支持RTTI的关键字:is . as  .typeof. 下面依次介绍他们   is运算符: 通过is

Kotlin的互操作——Kotlin与Java互相调用

互操作就是在Kotlin中可以调用其他编程语言的接口,只要它们开放了接口,Kotlin就可以调用其成员属性和成员方法,这是其他编程语言所无法比拟的.同时,在进行Java编程时也可以调用Kotlin中的API接口. Kotlin与Java互操作 1 Kotlin调用Java Kotlin在设计时就考虑了与Java的互操作性.可以从Kotlin中自然地调用现有的Java代码,在Java代码中也可以很顺利地调用Kotlin代码. [例1]在Kotlin中调用Java的Util的list库. packa

java非静态方法可以调用静态变量吗?

问题描述 java非静态方法可以调用静态变量吗? 初学java,看到书上的编纂,可能出现了错误. 第二版(中文版)284页中原话: 问:非静态的方法可以存取静态的变量吗? 回答:当然可以.非静态方法不可以调用该类静态的方法或静态的变量. 实在是头大,网上查询都说非静态方法可以调用静态的方法和变量.但我自己试了一下 class Duck{ private int size; static int duckCount=0; public Duck(){ duckCount++; } } public

反射是否真的会让你的程序性能降低?

反射是否真的会让你的程序性能降低? 早两天写了<从把三千行代码重构成15行代码谈起>这篇文章,看到评论中有一些同学的回复还是在质疑反射的性能,好像程序用上了反射,就像开上了拖拉机似的.本来我觉得这个话题没有什么好讨论的了,网上已经有太多太多的文章在说这个问题,有疑问的大可以到网上找相关的文章来查阅.但是,我想起来我刚编程的时候,也是遇到这种困惑到网上一查找,从各种角度阐述的都有,本质基本都说出来了,但是还是有很多人不理解,我这里就从我的角度再说一遍. 反射肯定比直接调用慢 这个毋庸置疑了,我这

java反射技术与类使用示例_java

复制代码 代码如下: package com.java.db;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.Arrays;import java.util.