Код: Выделить всё
#!/usr/bin/java --source 11
package gomad;
import java.util.Arrays;
import java.util.function.Consumer;
import java.util.stream.Collectors;
import static gomad.MyKotlin.*;
public class Main {
public static void main(String[] args) {
System.out.println("Hello world!");
int[] x = MyArrays.sorted(3, 14, 15, 92, 6, 53, 58, 97, 93, 2, 38, 4, 62, 6, 43);
System.out.println(Arrays.stream(x).boxed().collect(Collectors.toList()));
}
}
class MyKotlin { // the idea of also() comes from Kotlin
static T also(T obj, Consumer action) {
action.accept(obj);
return obj;
}
}
class MyArrays {
static int[] sorted(int ... xs) {
return also(xs, Arrays::sort);
}
}
Важно отметить, что когда эта программа запускается как Java Main. java, та же бессмысленная ошибка: не удается найти метод main(String[]) в классе: появляется gomad.MyKotlin.
Но если вы попытаетесь запустить его как javac gomad/Main .java && java gomad.Main, вы получите ожидаемый результат, без ошибок.
Код: Выделить всё
$ /usr/lib/jvm/java-21-openjdk-amd64/bin/java Main.java
error: can't find main(String[]) method in class: gomad.MyKotlin
$ /usr/lib/jvm/java-21-openjdk-amd64/bin/java -version
openjdk version "21.0.2" 2024-01-16
OpenJDK Runtime Environment (build 21.0.2+13-Ubuntu-122.04.1)
OpenJDK 64-Bit Server VM (build 21.0.2+13-Ubuntu-122.04.1, mixed mode, sharing)
Ребята, я знаю, что это похоже на дубликат, но это не так. В других обсуждениях говорится, что класс с main() должен быть объявлен первым (и это правда), и что следует использовать javac, а затем java, что не совсем так, как она делает. скрипты работают. Это стиль вопросов и ответов, и я публикую свое решение вместе с этим вопросом. Если вы знаете, почему это происходит и как этого можно избежать, не отказываясь от использования некоторых языковых конструкций, поделитесь своим мнением.
Подробнее здесь: https://stackoverflow.com/questions/781 ... d-in-class