【Console Application】ファイルとデータベース 203【学習記】
ファイルとかデータベースの話🤤
→散々資料を探したけど static でも自クラスの参照は this らしい…
main
それじゃ main 移植するぽ🤤
🙄🙄🙄
しょっぱな1行目でいきなり大技きてるんだけど?🤪
とりあえず式をコピペしてみるか…😑
なんか Object(){} のとこなんとかしたら通りそうな気もするけどそれは結局 Java 式なので書き換えなのよね😑
自クラスとかも前回のリフレクションで見つけたやり方で参照できると思うけれど main での問題は static で呼ばれてインスタンスじゃないので this とかが使えないのでリフレクション的な参照が(そのままでは)できない事🙄
Java はそんなのが有るので main 内に限り Object から取得するのが1枚目に貼った画像の Java なんだけど…🤔
Java でもこの方法だと「別のクラス内で動かすと動作中のクラス名が返ってくる」のでアプリ名を取得できないのよね😞
さて、 Kotlin では如何に?🤤
1枚目の画像みたいなややこしい取得じゃなく、単純に getPackageName() というのが有る模様😞
なんで「パッケージ名」という発想に至らなかったのか…🙄
C 言語の呪いかな🤪
まぁ、実行してる main の「クラス名」が欲しいわけだからパッケージ名は「ちょっと役割が違う」かな🤔
しかし kotlin って語を入れてるにも関わらず先頭に Java の記事が来るの、最近の先生の無能化がよく分かる検索結果よね😞
………
Java でのやり方が先に出てくる…勿論文は全く一緒😞
………
クラス名を書いて ::class.java.name と付けるのも出てくる…これ、手で文字列入れるのと何が違うの…?🙄
………
java の語を弾くと C# や Swift が出てくる…雲行きが怪しい☁
………
出てこないお…😞
リフレクションから探った方が良いかしら?🤔
for (i in obj::class.members) {
println(i)
}
🤔🤔🤔
どうやら名前が分からなくても同じ書き方っぽい🤔
そういやリフレクションで調べてた時に出てた記事でインスタンスからも取れるとかあるやつはそういやオブジェクト名は書いてないなって気付いた🤪
でも問題は実行中の、即ち所属しているクラスを companion object 上から得る方法なのよね😑
companion object ではない fun 内なら this でできるけど companion object では this が無い筈だから…どうするんだろ?🤔
………
this が一般語だから検索語として無視されてる…ヒドイ😞
(ページ内検索で気付く)
………
日本語指定なのに出てくる英語のみの質問サイト…
もしかして:先生脂肪
(誤字は意訳してネ
fun test() {
process(::aa) // OK
process(::A.bb) // Overload resolution ambiguity
}
🤔🤔🤔
この、コロン2つの記述、手前に何かオブジェクト(とか変数)が要ると思ってたけど、文法的に演算子っぽい物だったのかな?🤔
この記法だと自分の居るスコープのクラスを見るんだろうか?文法確認したら分かるかな?🤔
惜しい…🙄
C で言う関数のポインタを得る感じ😞
………
もしかして:this::class
え、通っちゃうの?これ😳
APPNAME の型推測が想定通りになっててどうすんのこれ動くの?状態🤪
………エラー出てないしとりあえず this::class で通ってもらおっと🙄
-v で起動したら、分かる…🙄
次回は
main の2行目から移植再開よー🤪
たった1行でこんな大変な目に遭うとは…😞
この記事が気に入ったらサポートをしてみませんか?