xref: /aosp_15_r20/external/kotlinpoet/docs/callable-references.md (revision 3c321d951dd070fb96f8ba59e952ffc3131379a0)
1Callable References
2===================
3
4[Callable references][callable-references] to constructors, functions, and properties may be emitted
5via:
6
7- `ClassName.constructorReference()` for constructors
8- `MemberName.reference()` for functions and properties
9
10For example,
11
12```kotlin
13val helloClass = ClassName("com.example.hello", "Hello")
14val worldFunction: MemberName = helloClass.member("world")
15val byeProperty: MemberName = helloClass.nestedClass("World").member("bye")
16
17val factoriesFun = FunSpec.builder("factories")
18  .addStatement("val hello = %L", helloClass.constructorReference())
19  .addStatement("val world = %L", worldFunction.reference())
20  .addStatement("val bye = %L", byeProperty.reference())
21  .build()
22
23FileSpec.builder("com.example", "HelloWorld")
24  .addFunction(factoriesFun)
25  .build()
26```
27
28would generate:
29
30```kotlin
31package com.example
32
33import com.example.hello.Hello
34
35fun factories() {
36  val hello = ::Hello
37  val world = Hello::world
38  val bye = Hello.World::bye
39}
40```
41
42Top-level classes and members with conflicting names may require aliased imports, as with
43[member names](m-for-members.md).
44
45 [callable-references]: https://kotlinlang.org/docs/reference/reflection.html#callable-references
46