A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 唐林渊 黑马帝   /  2012-3-11 23:12  /  1604 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.Method;

public class Reflect {

        public static void main(String[] args) throws Exception {
                Jucicer jj=new Jucicer();
               
                BufferedReader br= new BufferedReader(new FileReader("File.txt")) ;
                //获取class对象
        String bb=br.readLine();
        Class clazz=Class.forName(bb);//获取了class文件
        fruit f=(fruit)clazz.newInstance();//创建了对象
       
        String Meth=br.readLine();
       
        Method mm=Jucicer.class.getMethod(Meth,fruit.class);
        mm.invoke(jj,f);
        }

}
interface fruit
{
        void squee();
        void mrr();
}
class Jucicer
{
        public void run(fruit ff)
        {
                ff.squee();
        }
}
class Apple implements fruit
{
        public void squee()
        {
                System.out.println("苹果汁");
        }
        public void mrr()
        {
                System.out.println("削皮");
        }
}
class Orange implements fruit
{
        public void squee()
        {
                System.out.println("橘子汁");
        }
        public void mrr()
        {
                System.out.println("zhajuzi");
        }
}


另一个
File.txt
cn.itcast.day22.Exercise.Apple
squee


异常报告
Exception in thread "main" java.lang.NoSuchMethodException: cn.itcast.day22.Exercise.Jucicer.squee(cn.itcast.day22.Exercise.fruit)
        at java.lang.Class.getMethod(Class.java:1605)
        at cn.itcast.day22.Exercise.Reflect.main(Reflect.java:22)


帮忙看看吧

3 个回复

倒序浏览
本帖最后由 吴璞玉 于 2012-3-11 23:42 编辑

{:soso_e103:}
额  我表示想看下File.txt
Method m1=String.class.getMethod("charAt",int.class)  使用getMethod方法根据方法名和参数类型获取该类的指定的方法。那个异常的话,并不代表你没有这个方法,可能是你的方法权限问题,才导致没办法取
回复 使用道具 举报
这个异常 翻译中文的意思是  你在配置文件里写的 方法 main没有找到
回复 使用道具 举报
本帖最后由 了无尘 于 2012-3-12 00:51 编辑

  1. import java.io.BufferedReader;
  2. import java.io.FileNotFoundException;
  3. import java.io.FileReader;
  4. import java.io.IOException;
  5. import java.lang.reflect.Method;

  6. public class Reflect {

  7.         public static void main(String[] args) throws Exception {
  8.                 Jucicer jj=new Jucicer();
  9.                
  10.                 BufferedReader br= new BufferedReader(new FileReader("File.txt")) ;
  11.                 //获取class对象
  12.         String bb=br.readLine();
  13.         Class clazz=Class.forName(bb);//获取了class文件
  14.         fruit f=(fruit)clazz.newInstance();//创建了对象
  15.         
  16.         String Meth=br.readLine();
  17.         Class[] param = {  fruit.class };
  18.         Method mm=Jucicer.class.getMethod(Meth,null);
  19.         mm.invoke(jj,null);
  20.         
  21.         System.out.println("game over");
  22.         }

  23. }
  24. interface fruit
  25. {
  26.         void squee();
  27.         void mrr();
  28. }
  29. class Jucicer implements fruit
  30. {
  31.         public void run(fruit ff)
  32.         {
  33.                 ff.squee();
  34.         }

  35.                 @Override
  36.                 public void squee() {
  37.                         // TODO Auto-generated method stub
  38.                        
  39.                 }

  40.                 @Override
  41.                 public void mrr() {
  42.                         // TODO Auto-generated method stub
  43.                        
  44.                 }
  45. }
  46. class Apple implements fruit
  47. {
  48.         public void squee()
  49.         {
  50.                 System.out.println("苹果汁");
  51.         }
  52.         public void mrr()
  53.         {
  54.                 System.out.println("削皮");
  55.         }
  56. }
  57. class Orange implements fruit
  58. {
  59.         public void squee()
  60.         {
  61.                 System.out.println("橘子汁");
  62.         }
  63.         public void mrr()
  64.         {
  65.                 System.out.println("zhajuzi");
  66.         }
  67. }
复制代码
这里有个问题就是,你的 Jucicer里并没有squee这个方法。
getMethod方法的第二个参数是你这个方法的参数类型列表。如果该方法没有参数列表,这个地方填null。
invoke方法同上

另外就是,这两个方法的第二个参数是个数组

NoSuchMethodException: cn.itcast.day22.Exercise.Jucicer.squee(cn.itcast.day22.Exercise.fruit)
这个异常信息反应的是没有找到jucicer这个类的squee(fruit)这个方法

好吧,我也不知道你是不是要的这个答案
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马