2017-09-13 10 views
0

変数はnullですが、後でview.tagオブジェクト型に基づいて定義しました。設定する必要がありますが、Required Nothing found RequestCenterDetailsです。以下は、私はこのnull nullローカル変数を定義して後で設定する際にエラーが発生しました。

holder?.addressIcon?.setOnClickListener { 

     val tagObject = holder.institutecardView.getTag(R.id.item_institute_cardview) 
     var center=null 

     if(tagObject is RequestCenterDetails) 
     { 
      Log.d("location","-------------TEST----------- its a RequestCenter") 
      center=tagObject as RequestCenterDetails // over here it say "Required Nothing found RequestCenterDetails" 
     } 
     else if(tagObject is Center) 
     { 
      Log.d("location","-------------TEST----------- its a Center") 
     } 

をやろうとしていますどのようにある問題は、私はそこに、フィールドの値に基づいて、同じ行動を取る必要がありますが、両方のオブジェクトが異なるフィールド名を持っていることです。これを行うためのより良い方法はありますか?私はkotlinには新しいです。

答えて

3

あなたが知っている場合centercenterは、別のタイプのものとすることができる場合は、何をやっているの

var center: Any? = null 

を行うより簡潔バージョンは次のようになり

var center: RequestCenterDetails? = null 

を行い、RequestCenterDetails次のようになります。

var center: RequestCenterdetails? = tagObject as? RequestCenterDetails 

の値を中央に割り当てるtagObjectRequestRecenterDetailsの場合は、それ以外の場合はnullとなります。

+2

:任意の型を受け入れます暗黙のうちに 'Nothing? 'としかみなされない型' Nothing'を仮定します。 –

1

理由は、変数centerのタイプがNothing?であるためです。

var center: Any? = null 

しかし、これは、このような一般的なタイプで動作することはお勧めできません: あなたは言ってこれを変更することができます。あなたがに大丈夫ならあなたはちょうどそれがコンパイラにはっきりしていないとして、私は(RequestCenterDetailsCenterの両方のための)階層で可能な限り最高の共通の可能なタイプを置くことをお勧めしたいタイプを指定する必要があり、あるいは単にAny

0

明示的な型宣言なしヌル変数ます:完全性については

var center: Any = null

または

var center: CommonBaseClass = null