Мне нужен персональный инструмент командной строки, который должен взять имя конкретного подкласса в качестве аргумента 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
или что-то в этом роде (не беспокоиться о синтаксисе вызова командной строки прямо сейчас).
Я прочитал несколько вводныхучебники по ClassLoaders, но я задыхаюсь от понимания , когда нужно написать собственный загрузчик классов.Все учебные пособия, похоже, фокусируются на , как написать ваш загрузчик классов, но без объяснения, когда это уместно.И, поскольку это кажется довольно сложным, я бы предпочел не писать самостоятельно, если мне это не нужно.
Мне кажется, что если у меня есть скомпилированный файл Circle.class
,любая JVM не должна иметь проблем с чтением этого файла класса и созданием экземпляра Circle
во время выполнения на основе строки, которую я передаю, содержащей имя этого класса.
Может кто-нибудь уточнить, нужно ли мне писать свойсобственный загрузчик для этого конкретного примера, почему, а если нет, то, что мне нужно реализовать вместо someMagicalClassLoaderCall(String)
.
Спасибо!