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

有Java或C#的宏功能吗?

全鸿晖
2023-03-14
问题内容

宏非常有用。

因此,我偶尔会抱怨Java和C#中缺少宏。宏允许我强制内联,但允许我对非宏代码进行代码管理。

是否有任何基于Java或C#的项目/产品有效地允许宏或指定行内扩展。

我在想类似的东西

@macro public void hello(int x){…}

或当我调用方法时,调用之前的@inline注释将使被调用方法内联。

或者,我是否应该知道我应该相信编译器为我做出最好的决定,即最好是在分析之后就可以内联调用。

我希望这个问题不会导致辩论宏的赞成/反对/有用性。


问题答案:

宏不是标准Java语言的一部分,并且我不知道主流Java工具,IDE等都支持任何宏预处理器。因此,如果您在Java代码中使用宏,则应该会遇到一些“痛苦”。例如,

  • 源代码调试器不允许您设置相对于原始源代码的断点。
  • 如果您共享带有宏的Java代码,许多Java开发人员可能会at之以鼻,并且/或者抱怨必须安装/使用其他工具。

有很多用于Java的第三方宏预处理器的示例。例如Jatha,OpenJava,PrintMacroJ,JavaMacros等……(但是您遇到过使用其中任何一个的项目吗?)

宏允许我强制内联,但允许我对非宏代码进行代码管理。

真正。但是,JIT编译器在确定
内联的内容方面可能比您做得更好。它会(肯定)知道这些块有多大,并且它将具有执行频率,分支预测等您不可用的运行时统计信息。

请注意,有一些Hotspot JVM调优选项可能会影响优化程序的内联决策。看到此页面,然后扫描“ inlin”。例如,似乎有一种允许您增加内联方法主体的大小上限。



 类似资料:
  • 问题内容: \ …用于多线程网络服务器。 我想在多个线程之间传递数据。目前,我正在使用套接字,主线程阻塞在select()上,而工作线程阻塞在recv()上,尽管我觉得可能有更高级或预包装的方式来处理C++中的此任务。 问题答案: 我会让工作线程在线程池中等待。 然后主机等待选择(用于读取和写入)。 随着数据的到来,主服务器将作业添加到线程池中。添加每个作业后,线程将唤醒以执行该作业并返回到池中。

  • 问题内容: 假设我有一个,我通常会执行此操作以将其“钳位”到一个范围,这里是range 。也就是说,如果它低于范围起点,则将其增大到范围起点,高于范围终点,将其减小到范围终点。 是否有内置功能可钳位到一定范围? 问题答案: 研究了另一个答案中提供的通用钳位方法后,值得注意的是,此方法对原始类型有装箱/拆箱的注意事项。 这将使用包装器类,导致3个框操作,每个参数一个,对返回类型1个取消框操作。 为了

  • 问题内容: 我需要一个地图功能。Java中已经有类似的东西了吗? (对于那些想知道的人:我当然知道我自己如何实现这个琐碎的功能…) 问题答案: 从Java 6开始,JDK中没有函数的概念。 番石榴具有功能接口,但是该 方法提供了您所需的功能。 例: 输出: 如今,在Java 8中,实际上已经有一个map函数,因此我可能会以一种更简洁的方式编写代码:

  • 问题内容: 您好,我正在命令行应用程序上工作,它可以接受命令行参数,例如 我正在寻找可以返回我对选项及其对应值的函数,例如c中的getopt。 问题答案: 那里有很多针对Java的命令行解析器库。 picocli是最近(截至2019年末)具有许多功能和特性的命令行解析器。 一些较老的流行类是commons- cli (相当古老),args4j和JCommander。

  • 我们将Spring Kafka与Spring Boot(所有最新版本)结合使用。我们将Kafka消息的处理转换为KafkaHandler注释方法,并期望有效的验证方法和有效的有效载荷能够确保有效载荷的验证,但事实并非如此。此功能适用于KafkaListener,是否也适用于KafkaHandler? 非常感谢。

  • 我知道使用包含宏的POI读取和重写文件将保留宏。我需要使用SXSSF(ram限制)写出excel,但SXSSF不读取文件。 问题:如何使用XSSF读入带有宏的excel,然后使用SXSSF写出带有宏的excel?