美文网首页
Java中方法返回一个对象加上大括号

Java中方法返回一个对象加上大括号

作者: 搬码人 | 来源:发表于2023-09-19 14:09 被阅读0次

解释

在Java中,方法返回一个对象加上大括号的语法是匿名内部类的一种使用方式。
当一个方法返回一个对象时,通常使用该对象的类型作为返回类型。但是,在某些情况下可能可能需要创建一个临时的、具有特定行为的对象,而不是自定义一个完整的类。这时,可以使用匿名内部类来实现这个临时对象。
加上大括号的目的是定义这个匿名内部类并在其中重写重要的方法。这样的话,在方法体中就可以直接使用定义好的匿名内部类创建对象,然后返回。由于匿名内部类没有显示的类名称,因此使用大括号来包裹类的定义和实现。

实例

public Runnable getRunnable() {
    return new Runnable() {
        public void run() {
            // 实现run方法的具体逻辑
        }
    };
}

在上面的例子中,通过使用匿名内部类,我们可以在方法中直接定义并返回一个具有特定行为的Runnable对象,而不需要编写额外的类。
下面这个例子是Android Jetpack中Paging源码的一部分,在build之后创建的一个Paging大管家。
细节不用管,只用知道ComputableLiveData是一个抽象类,compute()是一个抽象方法。

    @AnyThread
    @NonNull
    @SuppressLint("RestrictedApi")
    private static <Key, Value> LiveData<PagedList<Value>> create(
            @Nullable final Key initialLoadKey,
            @NonNull final PagedList.Config config,
            @Nullable final PagedList.BoundaryCallback boundaryCallback,
            @NonNull final DataSource.Factory<Key, Value> dataSourceFactory,
            @NonNull final Executor notifyExecutor,
            @NonNull final Executor fetchExecutor) {
        return new ComputableLiveData<PagedList<Value>>(fetchExecutor) {
            @Nullable
            private PagedList<Value> mList;
            @Nullable
            private DataSource<Key, Value> mDataSource;

            private final DataSource.InvalidatedCallback mCallback =
                    new DataSource.InvalidatedCallback() {
                        @Override
                        public void onInvalidated() {
                            invalidate();
                        }
                    };

            @SuppressWarnings("unchecked") // for casting getLastKey to Key
            @Override
            protected PagedList<Value> compute() {
                @Nullable Key initializeKey = initialLoadKey;
                if (mList != null) {
                    initializeKey = (Key) mList.getLastKey();
                }

                do {
                    if (mDataSource != null) {
                        mDataSource.removeInvalidatedCallback(mCallback);
                    }

                    mDataSource = dataSourceFactory.create();
                    mDataSource.addInvalidatedCallback(mCallback);

                    mList = new PagedList.Builder<>(mDataSource, config)
                            .setNotifyExecutor(notifyExecutor)
                            .setFetchExecutor(fetchExecutor)
                            .setBoundaryCallback(boundaryCallback)
                            .setInitialKey(initializeKey)
                            .build();
                } while (mList.isDetached());
                return mList;
            }
        }.getLiveData();
    }
}

相关文章

  • 11- ES6 箭头函数

    1、箭头函数 由于大括号被解释为代码块,所以如果箭头函数直接返回一个对象,必须在对象外面加上括号,否则会报错。 如...

  • Android JNI 之 .h 头文件

    头文件实例 基本类型对应关系 规则 方法参数或者返回值为java中的对象时,必须以“L”加上其路径,不过此路径必须...

  • Cannot jump from switch statemen

    因为switch case 中是不能定义对象的,因为只要是在大括号内定义的对象所以只需要在case:后面加上大括号就OK

  • JAVA里的元祖类

    什么是元祖类   java中的方法只能返回单个对象,如果需要返回多个怎么办?通常我们会创建一个额外的对象,或者把返...

  • Head First Java读书笔记

    2.类与对象 P_41 全局对象表示方法:加上public, static, final;Java程序中如果类非常...

  • 关于Android的克隆模式和Java中的参数传递问题

    Java中的参数传递问:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那...

  • 自定义注解:ResultAble和ResultInfoAop

    功能 ResultAble 注解的方法返回的对象需要是一个Result对象。加上这个注解后,方法当出现异常的时候,...

  • Java8的新特性Optional类

    一、Java8以往版本的不足   在以往版本的Java中,对于调用某个方法得到的的返回对象,不能直接调用该对象的某...

  • java中的instanceof关键字

    解释:instanceof 是java中的一种用于检测对象是否是某个类的对象的方法 返回值:instanceof ...

  • java中Object的hashCode()和equals()方

    hashCode()方法 首先来看看hashCode()在源代码中的注释(java8): 作用是:为对象返回一个h...

网友评论

      本文标题:Java中方法返回一个对象加上大括号

      本文链接:https://www.haomeiwen.com/subject/vtinvdtx.html