首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
拉钩
V2EX  ›  Java

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

  •  
  •   deepkolos · 220 天前 · 437 次点击
    这是一个创建于 220 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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);
        }
    }
    
        1
    billlee   220 天前
    你的内部类能不能加 static?
        2
    SoloCompany   220 天前 via iPad   ♥ 1
    playState.new Listener() {}
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2101 人在线   最高记录 4019   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 17ms · UTC 08:20 · PVG 16:20 · LAX 00:20 · JFK 03:20
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1