Java对超级用户的静态访问
我正在探索一些示例代码,发现以下代码: 登录服务接口:Java对超级用户的静态访问,java,Java,我正在探索一些示例代码,发现以下代码: 登录服务接口: public interface LoginService extends Serializable { default boolean isLoggedIn (final HttpServletRequest req) { return null != PortalUtil.getUserId(req); } } 一个LoginServiceFactory,其中包含实现LoginSe
public interface LoginService extends Serializable {
default boolean isLoggedIn (final HttpServletRequest req) {
return null != PortalUtil.getUserId(req);
}
}
一个LoginServiceFactory,其中包含实现LoginService的嵌套LoginServiceImpl类
public class LoginServiceFactory implements Serializable {
private volatile LoginService loginService = null;
private final class LoginServiceImpl implements LoginService {
@Override
public boolean isLoggedIn(final HttpServletRequest req) {
/** this is the part I don't understand */
return LoginService.super.isLoggedIn(req);
}
}
}
我不明白在LoginService.super.isLoggedIn(req)
中调用了哪个方法。据我所知,它正在调用接口的超级接口LoginService
的isLoggedIn(req)
。但我认为这是不对的,因为超级接口是可序列化的。有人能帮我吗
编辑
我用一个完整的例子编辑了我的问题。我不认为它真的是重复的,因为这个例子比我在这个网站上找到的要复杂一点。当你在一个内部类中做 super.foo();将调用内部类的超类的foo()方法 召唤 Outer.super.foo();将调用名为outer的外部类的超类的foo()方法 如
class Outer extends OuterSuper {
class Inner {
public void someMethod() {
Outer.super.foo();
}
}
}
它不是一个静态引用,更像是一个“完全限定”引用。它不是静态访问,它只是一个限定符,明确说明您试图访问的
super
的类。当尝试从内部类引用外部类时,它很有用。如果您查看调用发生的上下文,它将帮助您(和我们)找到解释。科蒙人允许人们回答我的问题,因为我解释过,它比标记为已回答的问题更复杂……它用于调用isLoggedIn()在已实现的LoginService接口中定义的默认方法。如果只调用super.foo(),它将查找超类(即对象),因此将找不到方法。请注意,由于您的方法除了默认方法之外不做任何事情,因此整个方法是不必要的。关于你的咆哮:这就是为什么你应该从一开始就发布清晰的问题,并提供所有必要的上下文来回答它。