我对Java 8有一个复杂的问题。
问题
与嵌套的lambda编译器一起崩溃NullPointerException!
我知道lambda必须确实是无状态的,在这种情况下,具有状态的代码是Supplier实现,但它们是匿名类而不是lambda。
码
import java.util.function.Function;
import java.util.function.Supplier;
public class Test {
public static Function<String, Supplier<String>> A = aVal -> new Supplier<String>() {
@Override
public String get() {
return B.apply(aVal).get();
}
private Function<String, Supplier<String>> B = bVal -> new Supplier<String>() {
@Override
public String get() {
return C.apply(bVal).get();
}
private Function<String, Supplier<String>> C = cVal -> new Supplier<String>() {
@Override
public String get() {
return cVal;
}
};
};
};
}
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪
An exception has occurred …Run Code Online (Sandbox Code Playgroud) 我已将我的Play Framework版本从2.4.1更新到2.5.6,但现在我遇到了Web套接字管理问题.
我有一个Controller类,其中方法liveUpdate()返回一个WebSocket<String>实例.
在这种方法我用WebSocket.whenReady()用Out<String>在HashMap<Out<String>, String>哪里,关键是在客户端输出流和值是String包含,因为当我需要发送广播消息我迭代的语言信息HashMap.
现在所有这些都在2.5.6中删除或弃用!
在网上搜索我发现新的实现基于Akka Streams使用Flow该类,但我不知道如何调整我的代码.
WebSocket.whenReady() 被替换为 WebSocket.Text.accept()Out<?>通过与阿卡流替换Flow类这是我的代码:
Alarms.java
public class Alarms extends Controller {
@Inject
private ActiveAlarms activeAlarms;
[...]
public WebSocket liveUpdate() {
return WebSocket.whenReady((in, out) -> {
in.onMessage(language ->{
activeAlarms.register(out, language);
});
in.onClose(() -> activeAlarms.unregister(out));
});
}
[...]
}
Run Code Online (Sandbox Code Playgroud)
ActiveAlarms.java
public class ActiveAlarms{
private HashMap<Out<String>, String> …Run Code Online (Sandbox Code Playgroud) 我正在使用IntelliJ 2019.1.3 Community Edition。在Scala编译服务器中,JVM maximum heap size: 4096
我的idea.vmoptions:
-Xms4096m
-Xmx6144m
-XX:ReservedCodeCacheSize=2048m
-XX:+UseCompressedOops
-Dfile.encoding=UTF-8
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-ea
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
-Djdk.http.auth.tunneling.disabledSchemes=""
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-Xverify:none
-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
Run Code Online (Sandbox Code Playgroud)
环境
内存指示灯显示 2582 used of 6060M
我当前的项目相当大(超过800个文件),而且即使是很小的文件intellij也可以挂起几秒钟,而且检查已经花了很长时间。我可以加快速度吗?