[英]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.