[閒聊] 魔法 JNI

看板java作者 (偶爾想擺爛一下)時間15年前 (2010/04/30 00:00), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/4 (看更多)
這一篇不是要介紹 JNI 的觀念。 我個人有搞一個 project,其目的是把 Python 與 Java 整合在一起,我採用的 approach 不同於 Jython/IronPython,主要是把 JVM emdedded 在 Python process 裡。(最原始不是為了整合 Python/Java) 搞得過程會需要摸到 JNI,也因為如此我觀察到一些事情,這些事情對 Java programmer 而言有什麼重要性?對絕大多數而言,沒有。提出來只是因為這些 事情對 pure Java programmer 來說或許會大感意外。 有興趣的人可以把本文當作軼事看。 沒有興趣的人可以當作新聞看。 完全不懂 JNI,以後也完全不會/想用到 JNI 者,就可以離開不看。 ************************************************************************** package ptt.lang; /** * 沒有任何 runtime bytecode instrumentation/transformation, * 在不變更/不 disable standard output 前提下。 */ public class Magic { public static Magic createInstance() {...} public static void transform(String s) {...} public static Integer wrap(int value) {...} public final String name; public Magic() { name = "PTT"; System.out.println("initialize Magic instance."); } public static void main(String[] args) { final Magic obj = createInstance(); System.out.println(obj.name); // *有無可能輸出是 null? // 有無可能全部輸出內容中沒有包含 "initialize Magic instance"? final String s = "Java"; transform(s); System.out.println(s); // 有無可能輸出不是 "Java"? final Integer value = wrap(87); System.out.println(value == null); System.out.println(value instanceof Integer); // 有無可能兩個輸出皆是 false? } } 如果考慮 native method(JNI)進來,以上問題的答案皆是肯定的-有! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.173.134.91 ※ 編輯: sbrhsieh 來自: 218.173.128.59 (04/30 00:28)
文章代碼(AID): #1BsQqONi (java)
討論串 (同標題文章)
文章代碼(AID): #1BsQqONi (java)