实现匿名函数的匿名接口的java语法

实现匿名函数的匿名接口的java语法,java,lambda,interface,Java,Lambda,Interface,我有一个界面看起来像 public interface ListAbstractor { List<String> getList(); void addTo(String s); } 我想实现它,比如: ListAbstractor la = new ListAbstractor() { getList = ()-> settings.getZooKe

我有一个界面看起来像

public interface ListAbstractor
{
    List<String> getList();
    void addTo(String s);
}
我想实现它,比如:

ListAbstractor la  = 
                new ListAbstractor()
                {
                    getList = ()-> settings.getZooKeeperList();
                    addTo = (s)-> settings.addToZookeeperList(s);
                };

但是eclipse不喜欢这样。那么,最简单的方法是什么呢?

我最后做的是将接口分成两个接口。这实际上比我想做的代码少,所以要赢

myTestFunction(()-> settings.getZooKeeperList(),
                (s)-> settings.addToZookeeperList(s));              

我最后做的是将接口分成两个接口。这实际上比我想做的代码少,所以要赢

myTestFunction(()-> settings.getZooKeeperList(),
                (s)-> settings.addToZookeeperList(s));              

常见的解决方案是在接口中创建一个特殊的静态方法来构造实例:

import java.util.List;
import java.util.function.Consumer;
import java.util.function.Supplier;

public interface ListAbstractor {
    List<String> getList();
    void addTo(String s);

    public static ListAbstractor of(Supplier<List<String>> listSupplier,
                                    Consumer<String> adder) {
        return new ListAbstractor() {
            @Override
            public List<String> getList() {
                return listSupplier.get();
            }

            @Override
            public void addTo(String s) {
                adder.accept(s);
            }
        };
    }
}

常见的解决方案是在接口中创建一个特殊的静态方法来构造实例:

import java.util.List;
import java.util.function.Consumer;
import java.util.function.Supplier;

public interface ListAbstractor {
    List<String> getList();
    void addTo(String s);

    public static ListAbstractor of(Supplier<List<String>> listSupplier,
                                    Consumer<String> adder) {
        return new ListAbstractor() {
            @Override
            public List<String> getList() {
                return listSupplier.get();
            }

            @Override
            public void addTo(String s) {
                adder.accept(s);
            }
        };
    }
}

没有。Lambda语法仅适用于功能接口。使用匿名类声明语法(或定义实现接口的命名类型)。您所说的“函数接口”是什么意思?只有一个函数的接口?那么“是的,只有一个函数的接口”就没有了。Lambda语法仅适用于功能接口。使用匿名类声明语法(或定义实现接口的命名类型)。您所说的“函数接口”是什么意思?只有一个功能的接口?所以“是的,只有一个功能的接口”是不知道的。这个问题很清楚,也很有趣。我不知道。这个问题很清楚,也很有趣。我选择了你的答案,因为它看起来是用java实现的“正确”方法。我仍然希望有一种更轻松、更匿名的方法来声明函数,但我想这是java为您准备的。我选择了您的方法作为答案,因为它看起来是用java实现的“正确”方法。我仍然希望有一种更轻松、更匿名的方法来声明函数,但我想这是java为您准备的。