Java 内置功能<;T、 R>;正确的实践实现内部接口?

Java 内置功能<;T、 R>;正确的实践实现内部接口?,java,java-8,functional-interface,Java,Java 8,Functional Interface,我有一个问题,我希望知道什么是正确的做法。我在这里添加的代码只是一个示例。因此可能没有任何合理性 我将在构建函数接口中使用函数。我的方法是这样的 Function<List<Manager>, List<Employee>> getEmployeesFromManager = m -> { List<Employee> emps = new LinkedList<>(); for (Manag

我有一个问题,我希望知道什么是正确的做法。我在这里添加的代码只是一个示例。因此可能没有任何合理性

我将在构建函数接口中使用函数。我的方法是这样的

    Function<List<Manager>, List<Employee>> getEmployeesFromManager = m -> {

       List<Employee> emps = new LinkedList<>();
       for (Manager mgr : m) {
         Employee emp=new Employee();
         //do stuff
         emps.add(emp);
}

    return questActionParameters;
};
函数getEmployeesFromManager=m->{ List emps=new LinkedList(); 经理(经理:m){ 员工emp=新员工(); //做事 emp.add(emp); } 返回questActionParameters; };
我的问题是。我可以在接口中添加此代码,也可以在ServiceImpl类中添加此代码。(Springboot应用程序)。考虑到线程安全和最佳实践,此代码的正确位置是什么?接口还是类?

一般来说,如果它是一个实现,就像这看起来一样,我会把它放在一个类中。您可以创建一个接口并将其作为一个实现。将其作为默认方法放在接口中会使其处于最低的执行优先级。意思是具有相同签名的抽象类永远不会调用此代码。@MaxPower“意思是具有相同签名的抽象类永远不会调用此代码。”这一点很好。但是你的另一点。仅仅因为它是一个实现不应该放在类中,对吗?因为在Java8中,它要求我们也使用
default
method将实现放到一个接口上。我会争辩(再说一遍,这并不意味着我是对的),仅仅因为你可以,并不意味着你应该。在我看来,对于已经存在的接口,默认方法是非常好的,并且您希望在不破坏当前正在使用该接口的任何其他人的代码的情况下向其添加其他方法。例如,请参见
列表上的
forEach
接口。同样,由于您将此标记为功能接口,因此无法通过lambda调用默认方法。如果您的目标之一是允许lambda调用此方法,那么它不能是默认方法。