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

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

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

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

Android Emulator

Android EmulatorはアンドロイドのOSで起動しているアンドロイドのデバイスの機能をシミュレートするソフトウェアです。Emulatorは開発者に複数の違う設定を持ったデバイスを必要とすることなくアプリケーションを開発しテストすることが可能になります。

Q&A

解決済

1回答

1114閲覧

kotlin ジェネリクス 任意のクラスの戻り値を持つメソッドを作成したい

退会済みユーザー

退会済みユーザー

総合スコア0

Kotlin

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

Android Emulator

Android EmulatorはアンドロイドのOSで起動しているアンドロイドのデバイスの機能をシミュレートするソフトウェアです。Emulatorは開発者に複数の違う設定を持ったデバイスを必要とすることなくアプリケーションを開発しテストすることが可能になります。

0グッド

0クリップ

投稿2020/05/24 03:34

任意のクラスのインスタンスをJson形式に文字列変換をして、
そのJson形式の文字列をインスタンスに戻すというメソッドを実装したいです。
javaでは実装できていたのですが、kotlinで書けず質問しています。

javaで動いていたソース

java

1/** 2 * インスタンスを文字列変換して保存する。 3 */ 4public void setObject(String key, Object object) { 5 Gson gson = new Gson(); 6 setValue(key, gson.toJson(object)); // 値設定メソッドがほかにあり。gson.toJsonがObjectを文字列変換 7} 8 9/** 10 * 保存されている値をインスタンスに戻す。 11 */ 12public <T> T getObject(String key, Class<T> classOfT) { 13 Gson gson = new Gson(); 14 return gson.fromJson(getString(key), classOfT); // getStringでJson形式文字取得 15}

kotlinで試したこと

kotlin

1/** 2 * [key]に[any]を保存します。 3 */ 4fun setAny(key: String, any: Any) { 5 setValue(key, Gson().toJson(any)) // Objectは kotlinではAnyとすると聞いたのでAny。こっちは正しいと思っています。 6} 7 8/** 9 * とりあえずコンパイラーエラーになっていない。 10 */ 11fun <T> getAny(kiSpKey: KiSpKey, classOfT: Class<T>): T { 12 return Gson().fromJson(getString(kiSpKey), classOfT) 13} 14 15/** 16 * 呼び出し元 17 */ 18getAny("test", 任意のクラス名.class) // コンパイルエラー (Not enough information to infer type variable T)

呼び出し方、getAnyメソッドの定義の仕方のどちらが悪いかわかりません。
ご指摘お願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

クラスの渡し方が間違っていますね。Kotlinには任意のクラス名.classという記法はありません。以下のようにしてJavaのクラスを取得し渡せばビルドが通ると思います。ドキュメント

kotlin

1getAny("test", 任意のクラス名::class.java)

なお、Kotlinのreified修飾子を用いるとより簡単に記述することができます。

kotlin

1inline fun <reified T> getAny(kiSpKey: KiSpKey): T { 2 return Gson().fromJson(getString(kiSpKey), T::class.java) 3} 4 5// 呼び出し例 6getAny<任意のクラス名>("test")

投稿2020/05/24 04:40

kakajika

総合スコア3131

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問