gpt4 book ai didi

java - 在Java中,可以将一行代码作为方法参数吗?

转载 作者:行者123 更新时间:2023-12-02 06:07:03 31 4
gpt4 key购买 nike

我似乎无法在谷歌上找到任何关于此的信息,并且我不确定这是否可能。我想做的是将一行 Java 代码作为参数传递给方法。谷歌只显示将命令行参数传递给方法的结果,但我想传递实际的代码行。

基本上我想将 methodA 传递给 methodB,但 methodA 不是一个方法,而是一行代码。下面是使用反射将方法传递给方法的完整示例。

public class Relation<T> {

protected Set<Pair<T,T>> pairs = null;

public Relation() {
this.pairs = new LinkedHashSet<Pair<T,T>>();
}

/* Next 2 methods are methods for sending methods to methods useing java.lang.reflect.Method */
public Method getMethod(String name) {
try { return Relation.class.getDeclaredMethod(name);
} catch (Exception e) {}
return null;
}

public boolean execute(Method method, Object... params) {
try { return (Boolean) method.invoke(this, params);
} catch (Exception e) {}
return false;
}

/* The method I reuse several times so I just put methods inside of it */
public boolean pairsTFIterator(Method method) {
for(Pair<T,T> x : pairs) {
boolean bool = false;
for(Pair<T,T> y : pairs) {
if(execute(method, x,y))
bool = true; break;
}
if(!bool) return false;
}
return true;
}

/* To be replaced by the line of code*/
public static <T> boolean isSymmetricPairs(Pair<T,T> a, Pair<T,T> b) {
return a.getFirst().equals(b.getSecond()) && a.getSecond().equals(b.getFirst()) ? true :false;
}

/* Method that calls others */
public boolean isSymmetric() {
return pairsTFIterator(getMethod("isSymmetricPairs"));
}
}

上面的方法工作得很好,但我想更进一步,放弃像“isSymmetricPairs”方法这样的方法,只需将该方法的逻辑行直接放在“pairsTFIterator”中,如下所示:

public boolean isReflexive() {  
return baseSetTFIterator(
a.getFirst().equals(b.getSecond()) && a.getSecond().equals(b.getFirst()) ? true :false
);
}

我很确定这是不可能的,但如果有办法做到这一点,那就太好了。

最佳答案

听起来您正在寻找的是“一流的功能”。某些语言将函数视为变量,即您可以将它们分配给变量并将它们作为参数传递给其他函数。 Java 8 将引入 lambda 表达式的概念,它将支持此类功能。

还有其他 JVM 语言已经提供了这种功能,其中包括 Scala 和 Groovy 等两种更流行的语言。

只是为了让您了解一下它的样子,在 Groovy 中,您可以通过调用each() 方法并向其传递一个闭包(本质上是一个函数)来对集合的每个元素执行任意函数。

def list = [1, 2, 3, 4]
def printer = { x -> println x } // defines a closure that takes one arg and prints it
list.each(printer) // prints out the elements

def sum = 0
def summer = { x -> sum += x } // defines a closure that takes one arg and adds it to the sum variable
list.each(summer)
println sum // should be 1 + 2 + 3 + 4

关于java - 在Java中,可以将一行代码作为方法参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22187700/

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