gpt4 book ai didi

java - 来自方法的包装/代理样板

转载 作者:行者123 更新时间:2023-12-01 14:35:45 24 4
gpt4 key购买 nike

我不是 Java 专家,想知道是否可以包装仅在中间不同的方法来停止使用这样的样板代码:

public boolean storeAnimals(Cage cage, Collection<Anmial> animals, IConfiguration configuration) {
checkPrerequisite(cage);
String cagePath = cage.getPath();
AnimalStorage animalStore = AnimalStorage.openFile(cage, configuration);

//***/
do_sth_very_special
//***/

animalStore.closeFile();
return true;
}

public Collection<Anmial> getRedAnimals(Cage cage, IConfiguration configuration) {
checkPrerequisite(cage);
String cagePath = cage.getPath();
File animalStore = AnimalStorage.openFile(cage, configuration);

//***/
do_sth_very_special
//***/

animalStore.closeFile();
return result;
}

最佳答案

由于 java 不提供一种闭包,因此您可以为其使用接口(interface)。在这种情况下,您可以执行以下操作:

public Collection<Anmial> commonMethod(Cage cage, IConfiguration configuration, Runnable runnable) {
checkPrerequisite(cage);
String cagePath = cage.getPath();
File animalStore = AnimalStorage.openFile(cage, configuration);

//***/
runnable.run();
//***/

animalStore.closeFile();
return result;
}

你的方法会是这样的:

public boolean storeAnimals(Cage cage, Collection<Anmial> animals, IConfiguration configuration) {
commonMethod(cage, animals, configuration, new Runnable() {
public void run() {
System.out.println("something special");
}
});
return true;
}

当然,Runnable 接口(interface)只是为了举例说明这个想法,您可以根据需要实现一个接口(interface)。如果您需要内部代码访问外部定义的某些变量,您可以将其作为参数传递,如果外部代码需要访问内部定义的某些变量,您可以从调用中返回它们。

您可以定义一个通用接口(interface),例如:

public interface Executable<ReturnType, ParameterType> {

ReturnType execute(ParameterType parameter);

}

如果您需要更多参数来执行代码,您可以构建一个包含代码执行所需的所有字段的类。同样的情况也适用于结果。

这将是返回字符串列表的想法:

new Executable<List<String>, Void>() {

public List<String> execute(Void void) {
// something special
return new ArrayList<String>();
}

}

ParameterObject当您需要为执行提供更多对象时,可以使用它来解决问题。假设您有一个 Integer 和一个 boolean 需要提供给执行,这意味着您将有一个包含一个 Integer 和一个 boolean 的类 boolean 值例如:

public class MyParameter {

private boolean b;
private Integer i;

public MyParameter(Integer i, boolean b) {
this.b = b;
this.i = i;
}

// getters

}

new Executable<Void, MyParameter>() {

public Void execute(MyParameter params) {
// something special
System.out.println(params.getI());
return null;
}

}

关于java - 来自方法的包装/代理样板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16501371/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com