Разница между 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.