lambda 自动推断内部类 和 内部类
接口可以自动推断内部类
if (StringUtils.isNotEmpty(prefsBean.getPassword())
|| prefsBean.isAnonymousLogin())
{
final AndroidPrefsUserManager userManager = new AndroidPrefsUserManager(prefsBean);
//这是一个匿名内部类,没有new,由lambda自动推断
sshServer.setPasswordAuthenticator((username, password, session) -> {
Authentication authentication = prefsBean.isAnonymousLogin()//做判断
? new AnonymousAuthentication()
: new UsernamePasswordAuthentication(username, password);
logger.debug("auth type '{}' for user: {}", authentication.getClass().getName(), username);
try {
userManager.authenticate(authentication);
} catch (AuthenticationFailedException e) {
logger.debug("AuthenticationFailed", e);
return false;
}
return true;
});
}
可以在匿名类里面做更复杂的逻辑
//实现 PasswordAuthenticator 接口,告诉 SSH 服务器在收到用户的登录请求时,应该如何判断这个用户提供的密码(或匿名请求)是否合法
一般类要正常创建对象
比如这个
public class SessionFactory extends AbstractSessionFactory
所以
sshServer.setSessionFactory(new SessionFactory() {
@Override
protected AbstractSession createSession(IoSession ioSession) throws Exception {
SocketAddress remoteAddress = ioSession.getRemoteAddress();
boolean ipAllowed = RemoteIpChecker.ipAllowed(remoteAddress, pftpdService, logger);
return ipAllowed ? super.createSession(ioSession) : null;
}
});
这里调用了SessionFactory()构造方法实例化对象,再重写这个方法,达到白名单的效果
补一句Java注解
Java注解里面可能会遇到因为尖括号的存在无法正常在IDEA当中渲染的问题:
/**
*
这个玩意其实是可以用 <code>AndroidFragment<org.primftpd.prefs.FtpPrefsFragment>()</code> 代替的。摆了不想改了
*/
不会渲染尖括号里面的内容,就算转义尖括号似乎也没有用
用单引号就行了
/**
* 这个玩意其实是可以用 `AndroidFragment<org.primftpd.prefs.FtpPrefsFragment>()` 代替的。摆了不想改了
*/
顺便吐槽一句:Android studio的侧边栏开启取消停靠就会变得贼卡
最新的panda 3也是一堆侧边栏Bug

浙公网安备 33010602011771号