2016-08-04 15 views
-5

OnlyFolderFilterのオブジェクトを作成したい場合、私はPublicParFunにいくつかのユーティリティ関数とクラスを入れます。Androidで内部クラスのオブジェクトを作成する簡単な方法はありますか?

コードnew PublicParFun().new OnlyFolderFilterを書く必要があります。Androidの内部クラスのオブジェクトを作成する簡単な方法はありますか?

public class PublicParFun { 

    public static void ClearIcon(Context myContext) { 
     NotificationManager notificationManager = (NotificationManager)myContext.getSystemService(android.content.Context.NOTIFICATION_SERVICE); 
     notificationManager.cancel(myContext.getResources().getInteger(R.integer.NotificationID)); 
    } 

    public class OnlyFileFilter implements FilenameFilter{ 
     boolean isExcludeHidden; 

     public OnlyFileFilter(boolean isExcludeHidden){ 
      this.isExcludeHidden=isExcludeHidden; 
     } 

     @Override 
     public boolean accept(File dir, String name) { 
      File f=new File(dir, name); 

      if (isExcludeHidden) { 
       return f.isFile() && (f.isHidden() == false); 
      }else{ 
       return f.isFile(); 
      } 
     } 
    } 


    public class OnlyFolderFilter implements FilenameFilter{ 
     boolean isExcludeHidden; 

     public OnlyFolderFilter(boolean isExcludeHidden){ 
      this.isExcludeHidden=isExcludeHidden; 
     } 

     @Override 
     public boolean accept(File dir, String name) { 
      File f=new File(dir, name); 

      if (isExcludeHidden) { 
       return f.isDirectory() && (f.isHidden() == false); 
      }else{ 
       return f.isDirectory(); 
      } 
     } 
    } 
} 
+0

メイクは ''ちょうど – flakes

+0

おかげ '新しいPublicParFun.OnlyFileFilter(...)を呼び出す!しかし、そこにある」 – HelloCW

+1

静的クラスに関する多くの制限があるため、静的クラスは良い方法ではありませんその後、'静的class'をOnlyFileFilter'静的クラスに関する多くの制限 "あなたはそれをどう思う?ネストされたクラスがラッピングクラスのインスタンスフィールドやメソッドに依存しない場合は、実際には静的でなければなりません。 [Read up](https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html) – flakes

答えて

1

flkes already saidとして、良い解決策は、内部クラスを静的内部クラスに変換することです。

  • 通常の内部クラスは、その外側のクラスのインスタンスなしでは存在できず、したがって、あなたが効果的に代わりに一方の2つのオブジェクトを作成、new PublicParFun().new OnlyFolderFilter()を呼び出す必要があります。

  • 静的な内部クラスを使用する場合、内部クラスは外部クラス(およびそのフィールド)のインスタンスを必要とせず、それ自体のために存在することができます。

内部クラスを静的内部クラスの完全な候補にする外部クラスのフィールドは使用していません。次の2つのオブジェクトは、新しい内部クラスを希望するたびに作成するあなたの「ダブル・コンストラクタ」と

  • : 2種類の違いは、インスタンス化コードだけではありません。
  • 通常の内部クラスのインスタンスは、その外部オブジェクトの参照を保持しているため、内部オブジェクトへの参照を持っている限り、外側のオブジェクトは生きているようにしてください。
  • 追加のポイントは読みやすいことです。コードを読み取ると、静的キーワードが適用されている場合、内部クラスが外部クラスのインスタンスの状態を変更または読み取っていないことをすぐに知ることができます。
関連する問題