Вы можете , но вы не должны .
не должны часть:
Вы не следует , потому что использование препроцессора таким образом считается плохой практикой для начала, и существуют лучшие и более идиоматические способы решения этого варианта использования.
может часть: (*)
Сама Java не поддерживает макросы.С другой стороны, вы могли бы передать исходный код через препроцессор C (для краткости CPP), как это делает цепочка компиляции C / C ++.
Вотдемо:
src/Test.java
:
#define READINT (new java.util.Scanner(System.in).nextInt())
class Test {
public static void main(String[] args) {
int i = READINT;
}
}
cpp
команда:
$ cpp -P src/Test.java preprocessed/Test.java
Результат:
class Test {
public static void main(String[] args) {
int i = (new java.util.Scanner(System.in).nextInt());
}
}
Компиляция:
$ javac preprocessed/Test.java
Лучший обходной путь:
Вместо этого вы можете написать собственный класс утилит с помощью статического метода:
import java.util.Scanner;
class StdinUtil {
public final static Scanner STDIN = new Scanner(System.in);
public static int readInt() {
return STDIN.nextInt();
}
}
А если вы хотите его использовать, вы можете статически импортироватьreadInt
метод:
import static StdinUtil.readInt;
class Test {
public static void main(String[] args) {
int i = readInt();
}
}
(или сделайте static import StdinUtil.STDIN;
и используйте STDIN.nextInt()
.)
И, наконец, анекдот
Я сам однажды использовал подход предварительной обработки CPP для кода Java!Я создавал задание по программированию для курса.Я хотел иметь возможность легко извлечь фрагмент кода из эталонного решения.Поэтому я просто использовал несколько #ifdef
s, чтобы отфильтровать «секретные» части решения.Таким образом, я мог бы поддерживать эталонное решение и легко восстановить кодовый скелет.
Этот пост был переписан как статья здесь .
(*) Так как я терпеть не могу отвечать на вопросы с «вы не должны».Кроме того, у некоторых будущих читателей могут быть веские причины для желания использовать cpp
вместе с исходными кодами Java!