2016-07-11 6 views
0

Was ist der Unterschied zwischen diesen beiden Funktionen in LuaJava ist:Unterschied zwischen bindClass und newInstance

-- 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"); 

Merkwürdigerweise konnte ich noch keine endgültige Antworten auf diese finden. Die meisten Websites, die diese Funktionen verwenden, beschreiben den Unterschied nicht, und ich kann dieselben Methoden von instance und class aufrufen.

Antwort

0

bindClass kann nur auf statische Member zugreifen und erstellt keine Instanz des Objekts. Dies ist nützlich für den Zugriff auf statische Felder und Methoden oder für den Zugriff auf enums. newInstance übernimmt Argumente und konstruiert tatsächlich eine Klasse, die ihre eigenen nicht statischen Felder und Methoden haben kann.

Der Versuch, eine Klasse mit nicht statischen Membern zu verbinden, kann den folgenden Fehler ergeben.

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 

Soweit ich aus einigen Tests sehen, können beide nur Zugriff auf öffentliche Felder und Methoden, sind geschützt und privat von lua versteckt.