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

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

新規登録して質問してみよう
ただいま回答率
85.48%
オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

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

Q&A

解決済

1回答

1618閲覧

kotlin:コンパニオンオブジェクトの受け取り方

Amanokawa

総合スコア41

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

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

0グッド

0クリップ

投稿2017/09/12 13:35

Nullで定義したコンパニオンオブジェクトを別のファイルで読み込むにはどのようにすればよいでしょうか?
importしてクラス名.オブジェクト名で読み込んだとき型が違いますとエラーが出てしまいます。
classBから参照するときには値が入った状態にしてあります。

class A

kotlin

1companion object { 2 var arrayObject: Array<Int>? = null 3} 4 5fun hoge(){ 6 arrayObject = Array<Int>(1, {0}) 7}

Class B

kotlin

1var array: Array<Int> = A.arrayObject

エラー文
Type mismatch. Required: Array<Int> , Found: Array<Int>?

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

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

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

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

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

guest

回答1

0

ベストアンサー

arrayObjectはオプショナル型ですので、呼び出し側でもオプショナルに定義してあげる必要があります。
エラーメッセージは、「Array<Int>が必要だと定義されているけど、実際に参照しているのはArray<Int>?だよ」という意味です。

次のようにClassBで呼び出してあげてください。

kotlin

1var array: Array<Int>? = A.arrayObject

投稿2017/09/13 01:13

hiramekun

総合スコア428

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

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

Amanokawa

2017/09/13 03:22

回答ありがとうございます。私も調べてみたところ、nullableとNon-nullはそもそも型が違うのですね。 Class Bで呼び出した後に.sizeを使いたいとき、nullableでは使えないと出てしまいます。 その場合 var array: Array<Int> = A.arrayObject!! として強制的にNon-nullにするしかないのでしょうか?
hiramekun

2017/09/13 03:39

それか、最初にClass Aのなかで、 companion object { var arrayObject: Array<Int> = emptyArray() } としてあげて、初期値を空の配列で定義すれば、どこでもNon-nullで扱うことができますがどうでしょう?
Amanokawa

2017/09/13 03:49

emptyArray()を使ってみます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問