Мм, вы уверены, что ваш код компилируется путем добавления префикса к классу private
?
Этот модификатор видимости не разрешен для классов первого уровня.По JLS 8.1.1
Модификаторы доступа protected
и private
относятся только к member классам в пределах непосредственно включенного объявления класса.
Но в любом случае вы также можете извлечь Class
с помощью Reflection;)
final Class<?> clazz = Class.forName("your.package.JSomething$INestedInterface");
theClass.getMethod("methodName", new Class[]{ clazz });
Или, если ваш класс JSomething
является внутренним static
классом, сам по себе
final Class<?> clazz = Class.forName("your.package.WrapperClass$JSomething$INestedInterface");
theClass.getMethod("methodName", new Class[]{ clazz });
Обратите внимание, что каждый "уровень вложенности" отмечен символом $
, а передаваемый вами String
называется классом двоичное имя (см. JLS 13.1 ).
Двоичное имя типа верхнего уровня (§7.6) является его каноническим именем (§6.7).
Двоичный файлимя типа члена (§8.5, §9.5) состоит из двоичного имени его непосредственно включающего типа, за которым следует $
, за которым следует простое имя члена.
И, кстати, getMethod
принимает параметр var-arg, так что вы можете просто передать одно значение
theClass.getMethod("methodName", clazz);