相关疑难解决方法(0)

功能编程与面向对象编程

到目前为止,我已经主要接触过OO编程,并期待学习一门函数式语言.我的问题是:

  • 什么时候选择面向对象的函数式编程?
  • 什么是典型的问题定义,函数式编程是更好的选择?

oop paradigms functional-programming

763
推荐指数
4
解决办法
25万
查看次数

基于参数的实际类型重载方法选择

我正在尝试这段代码:

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), …

java oop

107
推荐指数
4
解决办法
5万
查看次数

如何在java 8中使用lambda表达式覆盖基类方法?

必须将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并使用默认方法创建一个等效的接口但是,我怎么能选择要覆盖的方法呢?我是否需要在没有默认实现的情况下保留我想覆盖的方法?在这种情况下,对于具有不同未实现方法的不同情况,我将需要几个接口.

谢谢.

java lambda java-8

10
推荐指数
1
解决办法
6455
查看次数

在Kotlin中实现访客模式的最佳方式

在Kotlin中实施访客模式是否有任何技巧或常用方法?任何对初学者来说都不明显的东西,但会导致更简洁或有组织的代码.

编辑澄清:我有一个AST,其中有许多(~30)类型的节点.目前,每个类都实现了自己的print()方法,我想将其分解为一个单独的Printer类.随着访问者模式的到位,添加其他AST遍历类会更加清晰,其中会有几个.

design-patterns kotlin

4
推荐指数
1
解决办法
1811
查看次数