Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Lambda表达式中使用的接口和类是否可以放在单独的文件中?_Java_File_Class_Lambda_Interface - Fatal编程技术网

Java Lambda表达式中使用的接口和类是否可以放在单独的文件中?

Java Lambda表达式中使用的接口和类是否可以放在单独的文件中?,java,file,class,lambda,interface,Java,File,Class,Lambda,Interface,这可能是一个有点傻的问题,但我对Lamda表达式和编程一般来说是新手 在对Lambda表达式进行如下实验后: interface Starter { public void start(); } class Machine { public void run( Starter s ) { System.out.println("Running code...."); s.start(); } } public static void main(String[] arg

这可能是一个有点傻的问题,但我对Lamda表达式和编程一般来说是新手

在对Lambda表达式进行如下实验后:

interface Starter {
    public void start();
}

class Machine {
public void run( Starter s ) {
    System.out.println("Running code....");
    s.start();
 }
}
public static void main(String[] args){
    Machine mac1 = new Machine();
    mac1.run(() -> System.out.println("Hello World"));
}

这让我想知道,如果接口和类(在这种情况下是机器)可以移动到单独的文件中,这样仍然可以工作吗?我试着按照我认为可行的方式去做,但没有成功,这可能吗?如果是这样,你怎么做?

如果我正确理解了你的问题,那么只需添加一个单独的类(比如
App.class
),其中包含
public static void main
方法:

public interface Starter {

    public void start();

}

public class Machine {

    public void run( Starter s ) {
        System.out.println("Running code....");
        s.start();
    }

}


public class App {

    public static void main(String[] args){
        Machine mac1 = new Machine();
        mac1.run(() -> System.out.println("Hello World"));
    }

}

只要Machine类和Starter接口对主类可见,那么这是完全可能的


我的猜测是,您将Starter接口移动到了主类以外的另一个包中,并且由于您没有包含“public”修饰符,它对主类不再可见,并且将拒绝编译。

yes。您可以做到。在一个源文件中包含多个顶级类是极为罕见的。虽然语言支持它,但它从未在实际工作中完成。我只在一些小的特别代码中见过它,例如在将代码发布到在线测试/挑战站点时。所以要回答您的问题:是的,您可以始终将顶级类放在单独的源文件中。