gpt4 book ai didi

Java 类加载器基础

转载 作者:行者123 更新时间:2023-12-04 21:29:45 25 4
gpt4 key购买 nike

我需要一个个人命令行工具,它应该将具体子类的名称作为 CL 参数并在运行时实例化正确的 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

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

我已经阅读了几本关于类加载器的介绍性教程,但对理解何时需要编写自己的类加载器感到窒息。所有教程似乎都着重于如何编写您的类加载器,但没有解释何时适合这样做。而且,因为这样做似乎相当复杂,如果不需要的话,我宁愿不必自己编写。

在我看来,如果我有一个已编译的 Circle.class 文件,任何 JVM 读取该类文件并在以下位置构造一个 Circle 的实例应该没有问题运行时基于我传递给它的包含该类名称的字符串。

任何人都可以澄清我是否需要为这个特定示例编写自己的加载器,为什么,如果不需要,我需要实现什么来代替 someMagicalClassLoaderCall(String)

谢谢!

最佳答案

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

Class clazz = Class.forName("fully.qualyfied.ClassName");
Shape instance = (Shape)clazz.newInstance();
instance.draw()

关于Java 类加载器基础,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7245058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com