bindClass和newInstance之间的区别

时间:2016-07-11 01:05:05

标签: java luaj luajava

luajava中这两个函数有什么区别:

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

奇怪的是,我无法找到任何明确的答案。大多数使用这些功能的网站都不打算描述差异,我似乎能够从instanceclass调用相同的方法。

1 个答案:

答案 0 :(得分: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。