[英]Why MIN_VALUE and MAX_VALUE in Integer class is defined @native?
我正在浏览 Integer class 代码并注意到 MIN_VALUE 和 MAX_VALUE 带有 @native 注释。 我的问题是
使用@native 注解的目的是什么?
我们在哪里可以找到@native 使用的本地代码?
有没有我们应该在正常编程中使用@native 注释的用例?
public final class Integer extends Number implements Comparable<Integer> { /** * A constant holding the minimum value an {@code int} can * have, -2<sup>31</sup>. */ @Native public static final int MIN_VALUE = 0x80000000; /** * A constant holding the maximum value an {@code int} can * have, 2<sup>31</sup>-1. */ @Native public static final int MAX_VALUE = 0x7fffffff;
@native 文档说
/**
* Indicates that a field defining a constant value may be referenced
* from native code.
这主要用于自动生成本机代码。 因此,这些常量可以很容易地被本机代码使用。
相反:本机代码可以使用这样的常量。
如果你的意思是 normal==Java,那么答案是否定的。
Java 8 javadoc包括这些句子:
“表示可以从本机代码引用定义常量值的字段。注释可以用作生成本机 header 文件的工具的提示,以确定是否需要 header 文件,如果需要,它应该包含哪些声明。 “
所以:
- 使用@native 注解的目的是什么?
看上面。
- 我们在哪里可以找到@native 使用的本地代码?
生成的 header 文件以及对上述符号( MIN_VALUE
和MAX_VALUE
)的任何本机代码引用都将位于 OpenJDK Java 源代码树中。 (我通常使用find
、 xargs
和grep
的组合来追踪对源树中符号的引用,但可能有更好的方法。)
- 有没有我们应该在正常编程中使用@native 注释的用例?
一种情况是,如果您要实现自己的 API,其中涉及本机代码和生成的本机 header 文件。
但是,如果您指的是(纯)Java 代码中的用例,我想不出任何1 。
1 - 除了已经提到的那些(即 JNI 等原生 header 生成器)和愚蠢的那些(例如用于列出所有@Native
注释的工具)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.