Разница между bindClass и newInstance

В чем разница между этими двумя функциями в 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");

Как ни странно, я не смог найти однозначных ответов на это. Большинство веб-сайтов, использующих эти функции, не описывают разницу, и мне кажется, что я могу вызывать одни и те же методы из обоих instance а также class,

1 ответ

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.

Другие вопросы по тегам