Я пытаюсь создать Помощника.В моём приложении может быть много библиотек. После создания экземпляра я хочу создать фабрику, которая сможет совместно использовать экземпляр между классами, например:
public ArrayList<Helper> helper = new ArrayList<>(asList(
new Helper(SomeLib.class, new SomeLib()),
new Helper(SomeOtherLib.class, new SomeOtherLib())
));
Мой класс библиотеки является стандартным на данный момент для тестирования этой работы..
class Library {
public Library() { System.out.println("Instance is working"); }
}
Пример библиотеки, которую я пытаюсь заставить работать, выглядит следующим образом:
public class ExampleLib extends Library {
public void test() { System.out.println("Test OK"); }
}
Мой текущий класс Helper выглядит следующим образом, однако я не могу привести библиотеку обратно кисходный унаследованный класс, я пробовал несколько вещей:
import dreambot.libs.Library;
public class Helper {
private Library lib;
private Class<? extends Library> name;
public Helper(Class<? extends Library> name, Library lib) {
this.name = name;
this.lib = lib;
}
public Class<? extends Library> getName() { return name; }
public <Library> Library getLib() {
// All the things I've tried to do
return (this.name) lib;
return name.cast(lib);
return lib.getClass().cast(lib);
}
}
В свою очередь, я хочу получить следующее:
public ArrayList<Helper> helper = new ArrayList<>(asList(
new Helper(ExampleLib.class, new ExampleLib()),
));
public void test() {
Arrays.stream(helper.toArray()).filter(c -> c.getName(ExampleLib.class)).getFirst().ifPresent(h -> {
h.getLib().test(); // Should output "Test OK"
});
Ошибки, которые я получаю в своей среде IDE в Helper::getLib
используются следующие методы:
Не указано для return (this.name) lib;
Требуются несовместимые типы: Библиотека, Найдено: dreambot.libs.Library для return lib.getClass().cast(lib);
и return name.cast(lib);
Любая помощь будет оценена.