Ниже представлен код, выполнение которого ругается на то, что я вызываю .newInstance() для класса, который в данном пакете не виден. Я там смоделировал то, чего хочется: типа .setVilible("public").
Вопрос: Как избежать эксэпшэна?
В одном пакете:
package a;
import b.Creator;
public class A {
public static void main(String[] args){
B b = Creator.next(B.class);
System.out.println(b);
}
}
class B {
}
В другом пакете:
package b;
public class Creator {
public static <T> T next (Class<T> clazz){
try {
clazz.setVisible("public"); // вымышленная строка
clazz.getDeclaredConstructor().setAccessible(true);
return clazz.newInstance();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
Замечание: не нужно выворачивать условия вопроса, предлагать объявить класс B как public в отдельном файле и всё такое. Нужно конкретно в заданных условиях создать экземпляр класса B внутри метода класса Creator.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей