java - 如何在不先运行代码的情况下将代码传递给方法?

标签 java

请帮助我如何在 java 中实现以下内容。

public class TestUserFunctions {

    public static boolean equals(int val1, int val2){
        if(val1==val2){
            return true;
        } else{
            return false;
        }
    }
    public static Object iterateValue(String ittr, int iterations){
        for(int i=1; i <= iterations; i++){
            System.out.println("Printing iteration #"+i);
        }
        return ittr;
    }

    private static void ifElse(boolean condition, Object returnstr, Object elsestr){
        if(condition){
            System.out.println("TRUE");
            //Need a code here which will iterate string value only once.
        } else{
            System.out.println("FALSE");
            //Need a code here which will iterate string value thrice as specified.
        }
    }

    public static void main(String[] args){
        ifElse(equals(1, 1), iterateValue("Value", 1), iterateValue("Value", 3));
    }
}

我上面的代码在很多方面可能是错误的。我为此感到抱歉。 这里的预期输出是

TRUE
Printing iteration #1

如果是 ifElse(equals(1, 1), iterateValue("Value", 1), iterateValue("Value", 3)); 预期输出是

FALSE
Printing iteration #1
Printing iteration #2
Printing iteration #3

最佳答案

重点是:

ifElse(equals(1, 1), iterateValue("Value", 1), iterateValue("Value", 3));

在 Java 中,所有方法参数都会在调用发生之前得到评估(也称为计算)。

换句话说:

  • equals(1,1) 总是结果为真
  • 因此总是返回第一个“值”(尽管这并不重要;因为您在两种情况下都使用相同的值)
  • 如前所述,将执行对iterateValue()两个 调用;这意味着此方法被调用两次,每次调用都有各自的参数。

因此,如果您只想调用一次 iterateValue();您应该将它用作参数。取而代之的是:

ifElse(equals(1,1), "ValueA", "ValueB"));

然后直接在第一个或第二个传入的字符串参数上调用iterateValue();而且只有一次。

关于java - 如何在不先运行代码的情况下将代码传递给方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43117715/

相关文章:

java - 如何查看可执行 jar 的 System.out?

Java:方法内变量的生命周期

java - 使用路径列表从 SSH 查询大量文件

java - 升级 spring 版本后得到 java.lang.NoClassDefFoundError :

java - 解决 hibernate 异常问题

java - 在java中调用给定类对象的静态方法

java - JPA + Hibernate + Spring + OneToMany 删除级联

java - 警报对话框的处理结果如何? (安卓)

java - 如何在不使用instanceof的情况下处理多态事件

java - 使用嵌套在另一个扩展 Comparable 的类中的类覆盖compareTo 方法