考虑我有一个接受参数并返回一些东西的Java方法。
object NetworkClient {
var BASE_URL = "http://google.ru" //we can take this from another class or Pref's
const val API_BASE_URL = "$BASE_URL/api/"
val httpClient = OkHttpClient.Builder()
val client: Client
var retrofit: Retrofit
init {
val builder = Retrofit.Builder()
.baseUrl(API_BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
retrofit = builder.client(httpClient.build()).build()
client = retrofit.create<PapaJobsClient>(Client::class.java)
}
}
但是,如果我使用Java 8 Function,我可以实现同样的目的。我的意思是,如果我创建以下函数,我将得到相同的行为。我的问题是推荐哪一个?自Java 8诞生以来哪一个更好或最好?
public Employee mapPersonToEmp(Person p) {
......
return new Employee() ;
}
TIA。
答案 0 :(得分:2)
Function<Person , Employee> function = p -> {
......
return new Employee() ;
} ;
Employee e = function.apply(new Person());
Lambda用于传递行为。 如果您的要求是可以使用Person类的不同字段来创建Employee对象,并且需要在整个代码中传递此行为,那么您可以使用以下内容: -
Employee createEmpFromPerson(Function<Person, Employee> func) {
//this class already has a reference to some person object
return func.apply(person);
}
现在您可以通过以下方式调用此方法: -
createEmpFromPerson((per) -> new Employee(per.getName(), per.getEmail()));
createEmpFromPerson((per) -> new Employee(per.getName(), per.getAddress()));
这是一个非常简单的例子,旨在解释内置功能接口如何封装常见的行为。
显然,有更好的例子,但我希望你能理解我想要解释的内容。