gpt4 book ai didi

java - 我可以在 Java 源文件中有宏吗

转载 作者:IT老高 更新时间:2023-10-28 20:33:58 25 4
gpt4 key购买 nike

在我的程序中,我多次从控制台读取整数。每次,我都需要输入这一行。

new Scanner(System.in).nextInt(); 

我习惯了 C/C++,我想知道我是否可以定义类似的东西

#define READINT Scanner(System.in).nextInt(); 

然后,在我的 java 程序的每个地方,我都可以将表单控制台读取为

int a = new READINT;

但是我阅读了表格书籍 Java 不支持宏。

请有人解释一下为什么会这样,我可以用其他方式吗?

最佳答案

可以但你不应该

不应该部分:

不应该因为以这种方式使用预处理器is considered bad practice首先,有更好、更符合 Java 习惯的方法来解决这个用例。


可以部分:(*)

Java 本身不支持宏。另一方面,您可以通过 C pre processor 管道源代码。 (简称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()。)


最后,一个轶事

我自己曾经对 Java 代码使用过 CPP 预处理方法!我正在为一门类(class)创建一个编程作业。我希望能够轻松地从引用解决方案中提取代码骨架。所以我只是使用了几个 #ifdef 来过滤掉解决方案的“ secret ”部分。这样我就可以维护引用解决方案,并轻松地重新生成代码骨架。


本帖已改写为文章 here .


(*) 因为我讨厌用“你不应该”来回答问题。此外,一些 future 的读者可能有充分的理由希望将 cpp 与 Java 源代码结合使用!

关于java - 我可以在 Java 源文件中有宏吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6525059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com