我试图扩展一个类,以便以特权方式多态地运行其功能。我想避免修改示例中的基类Fooer,并且我绝对想避免反射。我最近一直主要使用javascript和python进行操作,因此我不断重复“使用函数指针”,但是由于函数不是java中的一类对象,因此不是一种选择。这似乎是一个有效的目标,所以我假设有人对此有所了解,这是一个好的设计模式。

public class SecureFooer extends Fooer()
{
    @Override
    public Object foo()
    {
        PrivilegedAction<Object> action = new PrivilegedAction<Object>() {
            @Override
            public Object run() {
                // This isn't going to work, i'm inside PrivilegedAction
                return super.foo()
            }
        };
        return AccessController.doPrivileged(action);
    }
}

最佳答案

语法是

return SecureFooer.super.foo();


之所以可行,是因为PrivilegedAction匿名类是SecureFooer的内部类,并且所有内部类都可以访问其封闭实例以及该实例的超级实现。

10-08 19:30