Сначала предположим, что у меня есть абстрактный класс, назовем его AbstractClass. Предположим,
public abstract AbstractClass {
public abstract void F();
}
Предположим, у меня есть класс, назовем его ClassA. ClassA расширяет AbstractClass. ClassA сохраняется в папке. (Он должен быть загружен в путь к классам.) Теперь предположим, что я пишу новый класс в программе,
ClassB
и я хочу, чтобы ClassB мог ссылаться на ClassA. Что-то вроде
public class ClassB extends AbstractClass {
ClassA A = new ClassA();
public void F() {
A.F();
}
}
Теперь у меня не было проблем с использованием загрузчика классов, чтобы получить classA и использовать его динамически. У меня также не было проблем с написанием класса, подобного ClassA, динамически на основе пользовательского ввода, компиляцией его в программе (с использованием ecj.jar), а затем загрузкой и вызовом методов из него.
Я не могу понять, как ссылаться на динамически загруженный класс в классе, который я сейчас пишу и динамически компилирую. Я не знаю, как написать импорт и т. Д. Загрузка класса A и положить
импорт класса A;
в файл classB.java не работает.
Это мой первый вопрос о StackOverflow (долгое время читатель), так что будьте осторожны со мной. Заранее спасибо.
-
Контекст: программа, использующая распределения вероятностей, введенные пользователем. У меня есть абстрактный класс AbstractDistribution, в котором есть абстрактные методы для CDF, PDF, обратного CDF и т. Д. До сих пор это работало хорошо, динамически создавая компиляцию и загружая дистрибутивы, расширяющие AbstractDistribution, получая newInstance () из них и используя их как любые другой класс. Однако, если я написал и динамически загрузил дистрибутив Dist1, я хочу иметь возможность написать Dist2, который может вызывать (например) PDF-файл Dist1.