Java 我想缩短这个方法,你能帮我吗?
我想用一种更短的方式写这个方法。你有什么想法吗?我没有得到运行的东西Java 我想缩短这个方法,你能帮我吗?,java,Java,我想用一种更短的方式写这个方法。你有什么想法吗?我没有得到运行的东西 public static AudioFile getInstance(String pathname) { String ending = null; int auxvar = pathname.lastIndexOf('.'); if (auxvar<0) { throw new RuntimeException("Unknown suffix for AudioFile:
public static AudioFile getInstance(String pathname) {
String ending = null;
int auxvar = pathname.lastIndexOf('.');
if (auxvar<0) {
throw new RuntimeException("Unknown suffix for AudioFile: \""+ pathname + "\"");
}else {
ending = pathname.substring(auxvar+1);
ending = ending.toLowerCase();
if (ending.equalsIgnoreCase("wav")) {
return new WavFile(pathname);
}else if (ending.equalsIgnoreCase("mp3") || ending.equalsIgnoreCase("ogg")) {
return new TaggedFile(pathname);
}else {
throw new RuntimeException("Unknown suffix for AudioFile: \" "+ pathname + "\" ");
}
}
}
公共静态音频文件getInstance(字符串路径名){
字符串结尾=null;
int auxvar=pathname.lastIndexOf('.');
如果(auxvar好的,如果您需要该代码,但要短一些:
public static AudioFile getInstance(String path) {
String pathc = path.toLowerCase();
if (pathc.endsWith(".wav")) return new WavFile(path);
if (pathc.endsWith("mp3") || pathc.endsWith(".ogg")) return new TaggedFile(path);
throw new IllegalArgumentException("Unknown suffix for AudioFile: \""+ path + "\"");
}
做同样的事情。好吧,如果你想要那段代码,但要短一些:
public static AudioFile getInstance(String path) {
String pathc = path.toLowerCase();
if (pathc.endsWith(".wav")) return new WavFile(path);
if (pathc.endsWith("mp3") || pathc.endsWith(".ogg")) return new TaggedFile(path);
throw new IllegalArgumentException("Unknown suffix for AudioFile: \""+ path + "\"");
}
做同样的事情。使用正则表达式的Monad样式解决方案:
final static Pattern audioFilePattern = Pattern.compile(".*\\.(\\w+)");
public static AudioFile getInstance(String path) {
return Optional.of(path)
.map(audioFilePattern::matcher).filter(Matcher::matches)
.map(m -> m.group(1).toLowerCase())
.filter(s -> Stream.of("wav", "mp3", "ogg").anyMatch(s::equals))
.map(s -> "wav".equals(s) ? new WavFile(path) : new TaggedFile(path))
.orElseThrow(() -> new IllegalArgumentException("Unknown suffix for AudioFile: \"" + path + "\""));
}
带正则表达式的Monad样式解决方案:
final static Pattern audioFilePattern = Pattern.compile(".*\\.(\\w+)");
public static AudioFile getInstance(String path) {
return Optional.of(path)
.map(audioFilePattern::matcher).filter(Matcher::matches)
.map(m -> m.group(1).toLowerCase())
.filter(s -> Stream.of("wav", "mp3", "ogg").anyMatch(s::equals))
.map(s -> "wav".equals(s) ? new WavFile(path) : new TaggedFile(path))
.orElseThrow(() -> new IllegalArgumentException("Unknown suffix for AudioFile: \"" + path + "\""));
}
您没有指定当条件失败时返回什么,我猜您的代码没有编译公共静态音频文件getInstance(String p){return null;}
--不客气。为什么您认为此代码需要缩短?您没有指定当条件失败时返回什么,我猜您的代码没有编译公共静态音频文件getInstance(String p){return null;}
--不客气。为什么您认为这段代码需要缩短?我想这是一个很好的例子,说明了为什么所有这些新的lambda代码通常更难遵循(代码可以采用更多的代码和更隐式的路径)、效率更低(速度会更慢)和灵活性更低(lambda不是控制流、可变局部变量或检查异常透明)。lambda很有用。但是使用正确的工具和所有这些。这不是应该使用的代码类型。我想这是一个很好的例子,说明了为什么所有这些新的lambda代码通常都很难遵循(代码可以使用更多的代码和更多的隐式路径)、效率更低(速度会更慢)和灵活性更低(lambda不是控制流、可变局部变量或检查异常透明)。lambda很有用。但是使用正确的工具和所有这些工具。这不是应该使用的代码类型。