簡體   English   中英

為什么Integer class中的MIN_VALUE和MAX_VALUE定義為@native?

[英]Why MIN_VALUE and MAX_VALUE in Integer class is defined @native?

我正在瀏覽 Integer class 代碼並注意到 MIN_VALUE 和 MAX_VALUE 帶有 @native 注釋。 我的問題是

  1. 使用@native 注解的目的是什么?

  2. 我們在哪里可以找到@native 使用的本地代碼?

  3. 有沒有我們應該在正常編程中使用@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.
  1. 這主要用於自動生成本機代碼。 因此,這些常量可以很容易地被本機代碼使用。

  2. 相反:本機代碼可以使用這樣的常量。

  3. 如果你的意思是 normal==Java,那么答案是否定的。

Java 8 javadoc包括這些句子:

“表示可以從本機代碼引用定義常量值的字段。注釋可以用作生成本機 header 文件的工具的提示,以確定是否需要 header 文件,如果需要,它應該包含哪些聲明。 “

所以:

  1. 使用@native 注解的目的是什么?

看上面。

  1. 我們在哪里可以找到@native 使用的本地代碼?

生成的 header 文件以及對上述符號( MIN_VALUEMAX_VALUE )的任何本機代碼引用都將位於 OpenJDK Java 源代碼樹中。 (我通常使用findxargsgrep的組合來追蹤對源樹中符號的引用,但可能有更好的方法。)

  1. 有沒有我們應該在正常編程中使用@native 注釋的用例?

一種情況是,如果您要實現自己的 API,其中涉及本機代碼和生成的本機 header 文件。

但是,如果您指的是(純)Java 代碼中的用例,我想不出任何1

1 - 除了已經提到的那些(即 JNI 等原生 header 生成器)和愚蠢的那些(例如用於列出所有@Native注釋的工具)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM