有没有一种简单的方法可以在Android中创建内部类的对象?

时间:2016-08-04 00:49:02

标签: java android

我在PublicParFun中放了一些实用函数和类,如果我希望创建一个OnlyFolderFilter的对象。

我必须编写代码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();
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

作为flkes already said,一个好的解决方案是将内部类转换为静态内部类。

  • 如果没有外部类的实例,普通内部类就不能存在,因此需要调用new PublicParFun().new OnlyFolderFilter(),有效地创建两个对象而不是一个。

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

您没有使用外部类的字段,这使得您的内部类成为静态内部类的完美候选者。 两种类型之间的区别不仅仅是实例化代码:

  • 使用"双构造函数"每次想要一个新的内部类时,你都会创建两个对象。
  • 普通内部类的实例在其外部对象上保存引用,因此只要您有对内部对象的引用,就要保持外部对象的存活。
  • 另一点是可读性。在读取代码时,如果应用了static关键字,您可以立即告诉内部类没有修改或读取外部类实例的状态。