LoginSignup
2
1

More than 3 years have passed since last update.

Kotlinでクラスと同名のメソッドをトップレベルに作れるらしい

Last updated at Posted at 2019-11-16

クラスのコンストラクタと同じ引数でなければ、トップレベルに同じ名前のメソッドを定義できる。

class Test (args: String)

fun Test() = "test"

これだけだといまいち使えないけど、ジェネリクスが絡むと使えるかも。

class Test2<T>(clazz: Class<T>) {
    // 何かしらの処理
}

inline fun <reified T> Test2(): Test2<T> = Test2(T::class.java)

val test2 = Test2<Int>()

何でこんなの調べたかというと、Gsonを使っているときにListの型情報を保持するクラスを作ったが、class渡すの面倒臭いなと思ったからだ。

// Listの型情報クラス。中身は省略
class ListType<T>(clazz: Class<T>)

// 大文字から始まるメソッドに警告が出るのを抑制
@Suppress("FunctionName")
inline fun <reified T> ListType(): ListType<T> = ListType(T::class.java)

// List<String>の型情報
val type = ListType<String>()

多分他にも使いみちあるかもだけど、今の所思いつかないので省略。

ただ、自分の場合はAndroid StudioのKotlinのカラースキームで、Functions > Package-level function call がデフォルトでItalicになっていたので、これを調整しないと見た目上違和感があった。

見た目クラスっぽいのに斜体になる

参考にしたものはこちら

2
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1