2016-08-04 41 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

制作'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(),有效地创建了两个对象,而不是一个。

  • 当使用静态内部类时,您可以有效地声明内部类不需要外部类(及其字段)的实例,并且可以为其自身存在。

你没有使用外部类的字段,这使得你的内部类完全可以用于静态内部类。 两种类型之间的区别不仅是实例代码:

  • 你的“双重构造”创建你想要一个新的内部类,每次两个对象。
  • 正常的内部类的实例在其外部对象上保存一个引用,所以只要你有一个对内部对象的引用就保留外部对象。
  • 另一个要点是可读性。在读取代码时,如果应用了static关键字,则可以立即告诉内部类未修改或读取外部类实例的状态。
相关问题