到目前为止,我已经主要接触过OO编程,并期待学习一门函数式语言.我的问题是:
我正在尝试这段代码:
interface Callee {
public void foo(Object o);
public void foo(String s);
public void foo(Integer i);
}
class CalleeImpl implements Callee
public void foo(Object o) {
logger.debug("foo(Object o)");
}
public void foo(String s) {
logger.debug("foo(\"" + s + "\")");
}
public void foo(Integer i) {
logger.debug("foo(" + i + ")");
}
}
Callee callee = new CalleeImpl();
Object i = new Integer(12);
Object s = "foobar";
Object o = new Object();
callee.foo(i);
callee.foo(s);
callee.foo(o);
Run Code Online (Sandbox Code Playgroud)
这打印foo(Object o)三次.我希望方法选择考虑到真实的(不是声明的)参数类型.我错过了什么吗?有没有办法修改这个代码,以便打印foo(12), …
必须将Lambda表达式强制转换为功能接口.据我所知,他们无法扩展课程,但我想知道是否有办法获得类似的东西.
我有java.nio.file.SimpleFileVisitor<Path>基类,我想覆盖它的方法,但我希望在另一个方法中这样做.我可以用匿名类这样做:
public static void printContent(Path path) throws IOException {
FileVisitor<Path> visitor = new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
throws IOException {
System.out.println(file);
return super.visitFile(file, attrs);
}
};
Files.walkFileTree(path, visitor);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在lambda的帮助下删除那些代码?
我认为lambda会是 (f) -> System.out.println(f);
我想忘记SimpleFileVisitor并使用默认方法创建一个等效的接口但是,我怎么能选择要覆盖的方法呢?我是否需要在没有默认实现的情况下保留我想覆盖的方法?在这种情况下,对于具有不同未实现方法的不同情况,我将需要几个接口.
谢谢.