首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java ClassLoader基础

Java ClassLoader基础
EN

Stack Overflow用户
提问于 2011-08-30 14:44:24
回答 3查看 858关注 0票数 2

我需要一个个人命令行工具,它应该将具体子类的名称作为CL参数,并在运行时实例化正确的Java类:

代码语言:javascript
运行
复制
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...
    }
}

因此,在命令行中,您可以按以下方式运行程序:

代码语言:javascript
运行
复制
java MyCommandLineTool -shape Circle

或者类似的东西(现在不担心命令行调用的语法)。

我读过几本关于ClassLoaders的入门教程,但我对理解需要编写自己的类加载器的时间感到窒息。所有的教程似乎都集中在如何编写类加载器上,但没有解释什么时候这样做是合适的。而且,因为这似乎相当复杂,我宁愿不必写我自己的,如果我没有必要。

在我看来,如果我有一个已编译的Circle.class文件,那么任何JVM都不会在读取该类文件和基于包含该类名称的字符串在运行时构造Circle实例时遇到任何问题。

有人能澄清我是否需要为这个具体的例子编写我自己的加载程序,为什么,如果不是,我需要实现什么来代替someMagicalClassLoaderCall(String)

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-30 14:50:49

在运行程序时,必须确保实际的类在类路径上

代码语言:javascript
运行
复制
Class clazz = Class.forName("fully.qualyfied.ClassName");
Shape instance = (Shape)clazz.newInstance();
instance.draw()
票数 5
EN

Stack Overflow用户

发布于 2011-08-30 14:51:04

您不需要为此编写自己的类加载器--只要正确地指定类路径即可。像这样的事情应该有效:

代码语言:javascript
运行
复制
String className = 'Circle';
Class myClass = Class.forName(className);
Object ofMyClass = myClass.newInstance();
票数 3
EN

Stack Overflow用户

发布于 2011-08-30 14:52:26

这应该像以下几点一样容易:

代码语言:javascript
运行
复制
Class c = Class.forName(strClassName);
Object o = c.newInstance();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7245058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档