在我的程序中,我多次从控制台读取整数。每次,我都需要输入这一行。
new Scanner(System.in).nextInt();
我习惯了 C/C++,我想知道我是否可以定义类似的东西
#define READINT Scanner(System.in).nextInt();
然后,在我的 java 程序的每个地方,我都可以从控制台读取表单
int a = new READINT;
但是我读过 Java 不支持宏的形式书籍。
有人请向我解释为什么会这样,我可以用任何其他方式做到这一点。
原文由 Muthu Ganapathy Nathan 发布,翻译遵循 CC BY-SA 4.0 许可协议
你 _可以_,但你 _不应该_。
不应该 的部分:
你 不应该 因为以这种方式使用预处理器 被认为是不好的做法,并且有更好和更多的 Java 惯用方法来解决这个用例。
罐头 部分:(*)
Java 本身不支持宏。另一方面,您可以像 C/C++ 编译链一样通过 C 预处理器(简称 CPP)输送源代码。
这是一个演示:
src/Test.java
:cpp
命令:结果:
编译:
更好的解决方法:
您可以使用静态方法编写自己的实用程序类:
而当你想使用它时,你可以静态导入
readInt
方法:(或者做
static import StdinUtil.STDIN;
并使用STDIN.nextInt()
。)最后,一个轶事
我自己曾经在 Java 代码上使用过 CPP 预处理方法!我正在为一门课程创建一个编程作业。我希望能够轻松地从参考解决方案中提取代码框架。所以我只使用了几个
#ifdef
来过滤掉解决方案的“秘密”部分。这样我就可以维护参考解决方案,并轻松地重新生成代码框架。这篇文章已被重写为一篇文章 here 。
(*) 因为我讨厌用“你不应该”回答问题。此外,一些未来的读者可能有充分的理由想要将
cpp
与 Java 源代码一起使用!