Для статического вложенного класса, вы можете обратиться к нему с помощью внешнего класса - OuterClass.NestedClass::new
:
public class Main {
public static void main(String[] args) {
int[] array = {1, 2, 3};
Arrays.stream(array).forEach(A.B::new);
}
}
class A {
public A(int x) {
System.out.println("A created, x = " + x);
}
public static class B {
public B(int x) {
System.out.println("B created, x = " + x);
}
}
}
Для внутреннего класса (вложенный не статический класс), вы можете сделать outerInstanceName.new InnerClass(...)
:
public class Main {
public static void main(String[] args) {
int[] array = {1, 2, 3};
A a = new A(500);
Arrays.stream(array).forEach(x -> a.new B(x));
}
}
public class A {
public A(int x) {
System.out.println("A created, x = " + x);
}
public class B {
public B(int x) {
System.out.println("B created, x = " + x);
}
}
}
Моя IDE предлагает мне преобразовать x -> a.new B(x)
в A.B::new
, но это не скомпилируется, потому что B не является статическим - он принадлежит не классу A
, а экземпляру класса A
. Поэтому, отвечая на ваш вопрос, я думаю, что это невозможно, и вам нужно будет использовать outerInstanceName.new InnerClass(...)
.
Не могли бы вы добавить код, т. Е. Где именно определен класс и где вы хотите его использовать? –
Интересно, что в разделе примеров [JLS по методам ссылок] (http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.13) есть Например: 'Outer.Inner :: new', но это не компилируется ... Они, возможно, означают' Outer.StaticNested :: new' ... – assylias
Не ссылка на метод, но вы можете использовать лямбда как '() -> external.new Inner() ' –