我需要一个个人的命令行工具,应采取具体子类的CL参数的名称,并在运行时实例化一个正确的Java类:的Java类加载器基础
public class MyCommandLineTool
{
public static void main(String[] args)
{
// Read the name of the desired class to load
String strClassName = getClassNameFromArgs(args);
// Now create an instance of that class (if it exists/is valid/etc.)
Shape oShape = someMagicalClassLoaderCall(strClassName);
// Now call the subclass's overridden draw() method
oShape.draw();
}
}
public abstract class Shape
{
// Some stuff
public abstract void draw();
}
public class Circle extends Shape
{
@Override
public void draw()
{
// etc...
}
}
因此,从命令行,你可以按照以下方式运行程序:
java MyCommandLineTool -shape Circle
或(现在不担心命令行调用的语法)类似的东西。
我已经阅读了ClassLoaders的几个入门教程,但是在理解时需要编写自己的类加载器。所有的教程似乎都集中在如何来编写你的类加载器,但没有解释什么时候这样做是合适的。而且,因为这样做似乎相当复杂,如果我不必这样做,我宁愿不必写自己的。
在我看来,如果我有一个编译Circle.class
文件,任何JVM应该没有问题读取类文件,并基于字符串我通过包含类的名字它在运行时构建Circle
的一个实例。
任何人都可以澄清我是否需要写我自己的加载器为这个具体的例子,为什么,如果不是,我需要实现什么,以代替someMagicalClassLoaderCall(String)
。
谢谢!