sonarLint:使这个匿名内部 class 成为 lambda
sonarLint: make this anonymous inner class a lambda
下面的代码有来自 SonarLint 的通知:
handler.setFileNameGenerator((new FileNameGenerator() {
@Override
public String generateFileName(Message<?> message) {
if (message.getPayload() instanceof File) {
return ((File) message.getPayload()).getName();
} else {
throw new IllegalArgumentException("File expected as payload.");
}
}
}));
我正在尝试以下操作,但 throw new IllegalArgumentException
部分有问题:
handler.setFileNameGenerator(message ->
(message.getPayload() instanceof File) ?
((File) message.getPayload()).getName() :
throw new IllegalArgumentException("File expected as payload."));
能请教一下吗?
您正在使用条件表达式:您不能将 throw
语句作为其中的一部分。这是第一个问题。
第二个挑战是您需要引发异常,因此您当前使用条件表达式的表达式将不起作用,除非您使用块:
handler.setFileNameGenerator(message -> {
if (message.getPayload() instanceof File) {
return ((File) message.getPayload()).getName();
} else {
throw new IllegalArgumentException("File expected as payload.");
}
});
这看起来更像是您匿名 class 的 copy/paste...
或者,您可以使用 Optional 来清理它:
handler.setFileNameGenerator(message -> Optional.of(message.getPayload())
.filter(p -> p instanceof File)
.map(f -> (File) f)
.map(File::getName)
.orElseThrow(() -> new IllegalArgumentException("File expected as payload.")));
下面的代码有来自 SonarLint 的通知:
handler.setFileNameGenerator((new FileNameGenerator() {
@Override
public String generateFileName(Message<?> message) {
if (message.getPayload() instanceof File) {
return ((File) message.getPayload()).getName();
} else {
throw new IllegalArgumentException("File expected as payload.");
}
}
}));
我正在尝试以下操作,但 throw new IllegalArgumentException
部分有问题:
handler.setFileNameGenerator(message ->
(message.getPayload() instanceof File) ?
((File) message.getPayload()).getName() :
throw new IllegalArgumentException("File expected as payload."));
能请教一下吗?
您正在使用条件表达式:您不能将 throw
语句作为其中的一部分。这是第一个问题。
第二个挑战是您需要引发异常,因此您当前使用条件表达式的表达式将不起作用,除非您使用块:
handler.setFileNameGenerator(message -> {
if (message.getPayload() instanceof File) {
return ((File) message.getPayload()).getName();
} else {
throw new IllegalArgumentException("File expected as payload.");
}
});
这看起来更像是您匿名 class 的 copy/paste...
或者,您可以使用 Optional 来清理它:
handler.setFileNameGenerator(message -> Optional.of(message.getPayload())
.filter(p -> p instanceof File)
.map(f -> (File) f)
.map(File::getName)
.orElseThrow(() -> new IllegalArgumentException("File expected as payload.")));