2016-08-04 3 views
-5

Я поместил некоторую функцию полезности и класс в PublicParFun, если я надеюсь создать объект OnlyFolderFilter.Есть ли простой способ создать объект внутреннего класса в 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

Make '' OnlyFileFilter' на статическую class', вызывайте 'новый PublicParFun.OnlyFileFilter (...)' – flakes

+0

Спасибо! Но статический класс не является хорошим способом, потому что есть много ограничений относительно статического класса – HelloCW

+1

«есть многие ограничения относительно статического класса «Почему вы так думаете? Если вложенный класс не полагается на какие-либо поля или методы экземпляра класса упаковки, он действительно должен быть статическим. [Чтение] (https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html) – flakes

ответ

1

Как flkes already said, хорошее решение для преобразования внутренних классов для статических внутренних классов.

  • Нормальный внутренний класс не может существовать без экземпляра своего внешнего класса, и поэтому вам нужно вызвать new PublicParFun().new OnlyFolderFilter(), эффективно создавая два объекта, а не один.

  • При использовании статических внутренних классов вы фактически утверждаете, что внутреннему классу не нужен экземпляр внешнего класса (и его полей) и он может существовать сам по себе.

Вы не используете поля внешнего класса, которые делают ваши внутренние классы идеальными кандидатами для статических внутренних классов. Разница между этими двумя типами не только код экземпляра:

  • С вашим «двойной конструктор» создать два объекта каждый раз, когда вы хотите новый внутренний класс.
  • Экземпляр нормального внутреннего класса содержит ссылку на свой внешний объект, поэтому сохраняйте внешний объект до тех пор, пока у вас есть ссылка на внутренний объект.
  • Дополнительная точка - читаемость. При чтении кода вы можете сразу сказать, что внутренний класс не модифицирует или не считывает состояние экземпляра внешнего класса, если применяется статическое ключевое слово.
Смежные вопросы