当前位置: 首页 > 面试题库 >

我可以在Java源文件中包含宏吗

翟俊
2023-03-14
问题内容

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

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

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

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

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

int a = new READINT;

但是我读过形式书籍Java不支持宏。

有人请向我解释为什么会这样,我可以用其他任何方式做到这一点。


问题答案:

可以,不可以

不该 部分:

不应该这样做,
因为以这种方式使用预处理器被认为是不好的开始,并且有更好且更多的Java惯用方式来解决此用例。

CAN 部分:(*)

Java本身不支持宏。另一方面,您可以像C / C ++编译链一样,通过
C预处理器
(简称CPP)传递源代码。

这是一个演示:

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预处理方法!我正在为课程创建编程作业。我希望能够轻松地从参考解决方案中提取代码框架。因此,我只用了几个#ifdefs来过滤掉解决方案的“秘密”部分。这样,我可以维护参考解决方案,并轻松地重新生成代码框架。

这篇文章在这里已被重写为文章。

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



 类似资料:
  • 问题内容: 我们正在使用加载属性信息。我们的属性文件已经变得非常庞大,我们正在考虑将主属性文件分成几个子模块。有可能实现这一目标吗? 让我知道? 问题答案: 首先,我想知道为什么您选择了。给出问题的表达方式后,您似乎不必关心本地化/国际化或捆绑文件继承。 有了它,它就变得异常容易,因为它实现了反过来又提供了一种合并另一张地图的方法。开球示例: 如果您真的坚持使用,则最好的选择是创建一个自定义,在该

  • 问题内容: 我想制作一个包含可绘制资源文件的Android库。但是我想知道库的资源ID是否可能与应用程序资源ID冲突。有可能建立这样的图书馆吗? 问题答案: 这正是 Android Library Projects 的主要思想,即在项目之间共享代码和资源。 Android库项目是一个开发项目,其中包含共享的Android源代码和资源。其他Android应用程序项目可以引用该库项目,并且在构建时将其

  • 我想做一个Android库,其中包含可绘制的资源文件。但我想知道库的资源ID是否可能与应用程序的资源ID冲突。有可能做这样的图书馆吗?

  • 我见过类似的问题,但他们仍然没有意义,我的猿类大脑。 这里有一个例子。如果我在名为的头文件中声明了一个函数:并且在文件中声明了一个函数:。我在另一个文件(例如)中看到过这样的人,它只包含头,它只有声明(里面没有代码),而不包含带有代码的。但令我震惊的是,当他们调用中的函数时,它使用了中的代码并打印“hello”。怎么做?当我只包含了文件时,它如何打印在文件中添加的“hello”,而它只是一个声明,

  • 这是我的代码: 如果年龄是15岁会发生什么?嗯,它给了我一个错误。所以我想知道是否有可能在案例中包含一个条件。例如, 我可以使用if语句,但我想知道是否可以使用开关。

  • 问题内容: 我想创建一个PHP类,可以说Myclass.php。现在在该类中,我只想定义类本身和一些实例变量。但是所有方法都必须来自Myclass_methods.php文件。我可以只将该文件包含到班级正文中吗? 我有充分的理由为什么要分开这个。简而言之,我将拥有一个后端,在其中可以更改类的业务逻辑,而所有其他内容必须保持不变。系统为我维护所有ORM和其他内容。 但是,如果这不是一个好主意,则最好