这是我的课程。
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();
答案 0 :(得分:2)
Class.forName()
将String作为参数,所以你需要以某种方式传递它,所以我认为你的意思是没有硬编码。
将String作为参数传递给程序,并从args数组中读取它们
java Janibot Janitor
....
Class.forName(args[0]).newInstance()
存在其他选项,例如从文件读取,使用扫描仪等