这里为什么直接new了一个接口,但编译器没有报错呢?这里也没有用内部类啊

这里为什么直接new了一个接口,但编译器没有报错呢?

MVCRequestCallback mvcRequestCallback = new MVCRequestCallback() {
                    @Override
                    public void onSuccess(Object successData) {

                    }

                    @Override
                    public void onFailure(Object failureData) {

                    }
                };

public interface MVCRequestCallback<T extends Object> {

    /**
     * 请求成功
     *
     * @param successData
     */
    void onSuccess(T successData);

    /**
     * 请求失败
     *
     * @param failureData
     */
    void onFailure(T failureData);
}

后面加花括号这种写法,实际是new了一个实现接口的匿名类,需要在匿名类内部(花括号内)实现你那个接口

多线程有个接口 Runnable,很多写法就是 new THread(new Runnable() {......}),这种写法就省了一个对象的引用

搞了半天终于搞明白了,也非常感谢好心的大佬的回答。这里我再总结一下:
这里直接new,后面也是一个匿名类,而mvcRequestCallback是接口的引用,
接口的引用只能通过new他的实现类(这里是编译器自动生成的继承该接口类)来赋值