145

In Java we have the Class::new syntax for constructor references. I know, there are callable references for methods, but how about constructors? A typical use case for me would be factories.

Mahozad
  • 18,032
  • 13
  • 118
  • 133
Kirill Rakhman
  • 42,195
  • 18
  • 124
  • 148

1 Answers1

221

You can get a function instance for a constructor by simply using ::ClassName, as if it were a factory function.

gw111zz
  • 274
  • 2
  • 10
Ilya Ryzhenkov
  • 11,782
  • 1
  • 40
  • 50
  • 40
    Much obliged. Idk if this will help anyone, but to do this with Sealed classes do: `SealedClass::SubClass` – aProperFox Feb 13 '18 at 15:50
  • 1
    What about references to secondary constructors? – Travis Well May 11 '20 at 20:48
  • 1
    @TravisWell what would be an equivalent in Java? AFAIK you can't reference specific constructor in Java. The compiler automatically detects which constructor to reference (through Class::new) by inferred (or explicit) argument types – Andrey Jun 01 '20 at 15:47
  • 1
    @TravisWell you can specify value type for different constructors. For example, `val a: () -> A = ::A` or `val a: (Int) -> A = ::A` – antaki93 Dec 04 '22 at 11:37