Pocket

ここでの内部クラスとは、次のようなMyAsyncTaskやMyAdapterです。

外部クラスHogeFragmentのメンバー変数やメソッドを、MyAsyncTaskやMyAdapterで参照・操作したいので、内部クラスにしています。

さて、内部クラスの問題は、呼び出し側(外部クラス)との関係がわかりにくいことです。

別ファイルのクラスになっていれば、呼び出し側とクラスの関係は、コンストラクタの引数やsetXXXの引数を確認して、呼び出し側のコードを読むことで、だいたいわかります。

内部クラスの場合は、外部クラスのどのメンバー変数を参照・更新しているのか、どのメソッドを呼んでいるのか、内部クラスのコードを全て読む必要があります。

内部クラスをリファクタして、別ファイルにしようとしても、予想外にたいへんな作業ですし、デグレの可能性もあります。

最近、あるアプリのアイコン一覧をRecyclerViewに置き換えました。修正前UIのadapterが内部クラスで書いてありました。慎重に読みながら、新UIのRecyclerViewのadapterは別ファイルにしました。