Java中的IIFE /自动方法?

时间:2015-05-21 00:02:48

标签: java function methods

我知道有一种方法可以在java中自动运行一个方法吗?这在javascript中被称为IIFE,但这在java中可能吗?

Javascript IIFE:

(function() {
    console.log('Hello!');    
})();

谢谢! (我也很好奇)

7 个答案:

答案 0 :(得分:1)

上面没有其他人提到的直接方法。

带有init()初始化程序的匿名内部类

我认为它可以像IIFE一样使用,但是问题在于它必须在另一个类中

Thread T  = new Thread() {
    private int num;
    Thread init(int num){
        this.num = num;
        return this;
    }
    @Override
    public void run() {
        // computes and outputs the factorial of num
        int res = 1;
        for (int i = 1; i <= num; i++) {
            res *= i;
        }
        System.out.println(res);
    }
}.init(3);

init()可用于传递用于工作的参数

答案 1 :(得分:0)

Java将自动运行&#34; public static void main(String [] args)&#34;指定类中的方法。

答案 2 :(得分:0)

在静态上下文中,您可以使用static修饰符定义括在括号内的代码:

public class MyClass{
    static{
        System.out.println("Running static");
    }
}

在Objects的上下文中,您可以使用相同的方式包装代码而不使用static修饰符:

public class MyClass{

    {
        System.out.println("Initializing");
    }

}

答案 3 :(得分:0)

java中没有IIFE。

Java是静态类型&amp;编译而不是动态输入和解释的javascript。

在java中,程序只有一个入口点,即mainstatic方法public

Groovy(JVM基本语言)中,您可以使用repl,其中定义的方法(函数是java术语中的方法)可以在以后调用,这可能是最接近IIFE的东西。

答案 4 :(得分:0)

在自己寻找这个想法时偶然发现了这个问题。我认为Java与JavaScript IIFE最接近的是抽象类的实例,它的唯一方法是执行方法,在实例创建期间被覆盖,然后在对象的实例化之后立即执行。你甚至可以得到它的封闭方面。但是,您无法在覆盖方法中更改变量引用的内容。

JavaScript的:

let subject = 'World';

(() => {
    console.log(`Hello, ${subject}!`);
})();

爪哇:

public abstract class Iife {
    public abstract void execute();
}

public class Main {

    public static void main(String[] args) {
        String subject = "World";

        new Iife() {
            @Override
            public void execute() {
                System.out.println("Hello, " + subject + "!");
            }
        }.execute();
    }
}

答案 5 :(得分:0)

这是Java中的IIFE:

((Function<String, String> )s -> {
    String z = "'" + s + "'";
    return z;
}).apply("aaa");

答案 6 :(得分:0)

以下所有打印“ Hello world!”

JavaScript:

console.log((function() {
  const x = "Hello world!";
  return x;
})());

Java:

System.out.println(((Supplier<String>) () -> {
  String x = "Hello world!";
  return x;
}).get());

在Java中,创建一个辅助函数来推断类型并为您执行该函数可能更符合人体工程学:

public static <T> T iife(Supplier<? extends T> supplier) {
  return supplier.get();
}
...
System.out.println(iife(() -> {
  String x = "Hello world!";
  return x;
}));

通常,您可能需要考虑分解功能。但是,如果函数相对较小,并且关闭了多个变量,则IIFE可能更具可读性。我将IIFE比作块表达式(Java没有)。