想问问如何实例化一个通过继承而来的子抽象类的匿名类?

2018-05-09 22:14:32 +08:00
 deepkolos

BaseState


public abstract class BaseState <T> {

    public void subscribe (Listener listener) { }

    public abstract class Listener {
        abstract void onUpdate (T val);
    }
}

TestState

public class TestState extends BaseState<Music> {}

Test

public class Test {
    void test () {
        PlayState playState = new PlayState();
        
        // 想这样来使用, 但是报错 PlayState.Listener is not an enclosing class
        playState.subscribe (PlayState.Listener() {
            void onUpdate(Music) {}
        });
    }
}

如何实例化一个通过继承而来的子抽象类的匿名类?

现在可以通过把 Listener 设置为 interface, 但是使用起来需要再次传递泛型参数

public abstract class BaseState <T> {

    public void subscribe (Listener listener) { }
    
    // interface 里面不能使用 abstract class 的泛型参数 T
    public interface Listener<T> {
        void onUpdate (T val);
    }
}
1614 次点击
所在节点    Java
2 条回复
billlee
2018-05-09 23:14:29 +08:00
你的内部类能不能加 static?
SoloCompany
2018-05-10 01:01:17 +08:00
playState.new Listener() {}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/453575

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX