RFR: 8268056: Update java.net and java.nio to use switch expressions [v2]
Chris Hegarty
chegar at openjdk.java.net
Wed Jun 2 09:17:29 UTC 2021
On Tue, 1 Jun 2021 17:20:38 GMT, Patrick Concannon <pconcannon at openjdk.org> wrote:
>> Hi,
>>
>> Could someone please review my code for updating the code in the `java.net` and `java.nio` packages to make use of the switch expressions?
>>
>> Kind regards,
>> Patrick
>
> Patrick Concannon has updated the pull request incrementally with one additional commit since the last revision:
>
> 8268056: Reverted changes to URLDecoder; reformatted change to FileTime
src/java.base/share/classes/java/nio/file/Files.java line 2832:
> 2830: result = FileVisitResult.CONTINUE;
> 2831: }
> 2832: default -> throw new AssertionError("Should not get here");
This is subjective, and we're still finding our way with how best to construct some of the more complex switch expressions.
Where possible, I think it is best to remove assignments from the individual case branches. The use of `yield` makes it very clear what is going on, and ensures that each case branch, well... yields something. So how about:
FileVisitResult result = switch (ev.type()) {
case ENTRY -> {
IOException ioe = ev.ioeException();
if (ioe == null) {
assert ev.attributes() != null;
yield visitor.visitFile(ev.file(), ev.attributes());
} else {
yield visitor.visitFileFailed(ev.file(), ioe);
}
}
case START_DIRECTORY -> {
var r = visitor.preVisitDirectory(ev.file(), ev.attributes());
// if SKIP_SIBLINGS and SKIP_SUBTREE is returned then
// there shouldn't be any more events for the current
// directory.
if (r == FileVisitResult.SKIP_SUBTREE ||
r == FileVisitResult.SKIP_SIBLINGS)
walker.pop();
yield r;
}
case END_DIRECTORY -> {
var r = visitor.postVisitDirectory(ev.file(), ev.ioeException());
// SKIP_SIBLINGS is a no-op for postVisitDirectory
if (r == FileVisitResult.SKIP_SIBLINGS)
r = FileVisitResult.CONTINUE;
yield r;
}
default -> throw new AssertionError("Should not get here");
};
-------------
PR: https://git.openjdk.java.net/jdk/pull/4285
More information about the nio-dev
mailing list