在java中动态加载类

时间:2014-08-05 03:32:17

标签: java class

这是我的课程。

package com.psu.janibot;

public class Janibot implements Runnable {

    public void move() {
        System.out.println("move");
    }

    @Override
    public void run() {

    }

    // main method
    public static void main(String[] args) {
        try {
            Janibot janibot = (Janibot) Class.forName("Janitor").newInstance();
            janibot.run();
        } catch (InstantiationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

import com.psu.janibot.Janibot;

public class Janitor extends Janibot {
    public void run() {
        move();
    }
}

package com.psu.janibot;

public class Janitor2 extends Janibot{
    public void run() {
        move();
    }
}

如果我输入> java Janitor,它将运行Janitor类 如果我输入> java Janitor2它将运行Janitor2类

我想做的是运行Janitor或Janitor2,而不在forName方法中键入类名,如Janibot janibot =(Janibot)Class.forName(" Janitor")。newInstance();

1 个答案:

答案 0 :(得分:2)

Class.forName()将String作为参数,所以你需要以某种方式传递它,所以我认为你的意思是没有硬编码。

将String作为参数传递给程序,并从args数组中读取它们

java Janibot Janitor
....
Class.forName(args[0]).newInstance()

存在其他选项,例如从文件读取,使用扫描仪等