0

luajava のこれら 2 つの関数の違いは何ですか:

-- I know this creates a new instance of a class
local instance = luajava.newInstance("path.to.class");
-- But it seems this does as well?
local class = luajava.bindClass("path.to.class");

奇妙なことに、これに対する決定的な答えを見つけることができませんでした。instanceこれらの関数を使用しているほとんどの Web サイトでは、わざわざ違いを説明することはなく、との両方から同じメソッドを呼び出すことができるようですclass

4

1 に答える 1

0

bindClass は静的メンバーにのみアクセスでき、オブジェクトのインスタンスを作成しません。これは、静的フィールドやメソッドへのアクセス、または列挙型へのアクセスに役立ちます。newInstance は引数を取り、実際に独自の非静的フィールドとメソッドを持つことができるクラスを構築します。

非静的メンバーでクラスをバインドしようとすると、次のエラーが発生する場合があります。

Exception in thread "main" org.luaj.vm2.LuaError: @your_lua:<line_number> vm error: java.lang.IllegalArgumentException: Can not set <type> field your.package.YourClass.yourLocalField to java.lang.Class

いくつかのテストからわかる限り、どちらもパブリック フィールドとメソッドにしかアクセスできず、保護されたものとプライベートなものは lua から隠されています。

于 2016-08-23T04:25:59.167 に答える