質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

2回答

3151閲覧

kotlin サブクラスのクラス名を取得する

退会済みユーザー

退会済みユーザー

総合スコア0

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2020/09/11 08:21

abstractとしたクラス側のメソッドで、サブクラスの情報を使用したいです。

abstractクラス

kotlin

1abstract class User { 2 abstract val clazz: Class<out User> 3 4 fun shout(): String { 5 return clazz.simpleName 6 } 7}

サブクラス

kotlin

1class Taira() : User() { 2 override val clazz: Class<out User> = Taira::class.java 3}

kotlin

1class Akira: User() { 2 override val clazz: Class<out User> = Akira::class.java 3}

やりたいこと

スーパークラス側では、サブクラスのクラス名を返すメソッドを実装しようとしています。
そのためにabstractなプロパティとしてサブクラスのクラスオブジェクトを保持するように実装しています。
でもスーパークラスがサブクラスの情報が欲しいときにわざわざサブクラスに実装を強制させる必要があるのかと疑問に思っています。

ほかに実装の方法はありますでしょうか。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

逆にどのサブクラスからもスーパークラスのクラス名を取得する場合はどのようにすればいいですか?

へ?

see: https://docs.oracle.com/javase/jp/11/docs/api/java.base/java/lang/Class.html#getSuperclass()

kotlin

1abstract class User { 2 fun 逆に(): String = this::class.java.superclass.simpleName 3 fun shout(): String = this::class.java.simpleName 4} 5... 6object Main { 7 @JvmStatic 8 fun main(args: Array<String>) { 9 println(Akira().shout()) 10 println(Akira().逆に()) 11 } 12} 13 14// Akira 15// User

投稿2020/09/12 12:13

shiketa

総合スコア4061

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/09/14 11:23

すみません、説明が悪かったです。 例でいうとUserクラスのクラス名をどのサブクラスでも取得する方法です。 この場合、Akiraがさらに別のサブクラスを持っていた場合にUserとならないことがあると思います。
shiketa

2020/09/14 13:24

> Userクラスのクラス名をどのサブクラスでも取得する方法です UserクラスにUserクラスの名前を返すメソッドを定義すれば、どのサブクラスでもUserクラスの名前を取得できます。目的がぜんぜん想像できませんが。`abstract class User { fun 逆に() = User::class.java.simpleName` でなければ、Objectが返される直前まで、スーバークラスをどこまでも遡ればいいのでは? `this::class.java.superclass.superclass.superclass....simpleName`
guest

0

ふつーに取得できましたけど?

kotlin

1abstract class User { 2 fun shout(): String = this::class.java.simpleName 3} 4 5class Taira() : User() 6class Akira : User() 7 8object Main { 9 @JvmStatic 10 fun main(args: Array<String>) { 11 println(Taira().shout()) 12 println(Akira().shout()) 13 } 14} 15 16// Taira 17// Akira

投稿2020/09/12 06:30

shiketa

総合スコア4061

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/09/12 07:59

ありがとうございます。 逆にどのサブクラスからもスーパークラスのクラス名を取得する場合はどのようにすればいいですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問