Сначала предположим, что у меня есть абстрактный класс, назовем его 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), а затем загрузки его и вызова методов из него.
Я не могу понять, как ссылаться на динамически загруженный класс в классе, который я сейчас пишу и компилирую динамически. Я не знаю, как писать импорт и т. Д. Загрузка класса А и сдача
import classA;
в файл класса В. Это не трюк.
Это мой первый вопрос о StackOverflow (долгое время читатель), так что легко на меня. Заранее спасибо.
-
Контекст: Программа, которая использует вероятностные распределения, введенные пользователем. У меня есть абстрактный класс AbstractDistribution, который имеет абстрактные методы для CDF, PDF, обратного CDF и т. Д. До сих пор это работало хорошо, динамически записывая компиляцию и загрузку распределений, расширяющих AbstractDistribution, получая из них newInstance() и используя их как любые другой класс. Однако, если я написал и динамически загрузил дистрибутив Dist1, я хочу иметь возможность записать Dist2, который может вызывать (например) PDF-файл Dist1.
Почему класс B не может расширять класс A? – Jasonw
@ jasonw, приведенный выше пример является действительно урезанным примером. Предположим, что у меня были классы ClassA1 и ClassB1, я мог бы хотеть 'class ClassB { ClassA1 A1 = новый ClassA1(); ClassA2 A2 = новый ClassA2(); общественная пустота F() { A1.F(); A2.F(); } } ' – richard
okay Ричард, некоторые гуру прольют некоторый свет здесь, я надеюсь :-) – Jasonw