Строка времени выполнения внедрения и выполнения кода Java ⇐ JAVA
-
Anonymous
Строка времени выполнения внедрения и выполнения кода Java
Я пытаюсь внедрить существующий код и выполнить строку дополнительного Java-кода, который использует классы, определенные в моем проекте, и манипулирует данными, предоставленными в моем «скомпилированном» коде. Я пробовал использовать beanshell, но у меня возникли некоторые проблемы с использованием уже существующих классов (кроме проблем с использованием лямбда-функций, оператора алмаза,...). Я знаю, что это совсем небезопасно, но я использую это в целях тестирования. Вот как сейчас выглядит мой код:
DiscoverViewModel viewModel = новый ViewModelProvider(viewModelStoreOwner).get(DiscoverViewModel.class); пытаться { ArrayListвещи = новый ArrayList(); viewModel.getAllThingsLiveData().observe((LifecycleOwner) контекст, вещи::addAll); Map потребляемыйThingMap = новый HashMap(); для (EntityConsumedThings t: вещи) { ConsumedThing ConsumerThing = WotInteraction.getInstance(context).getWot().consume(Thing.fromJson(t.thingJSON)); потребляемыйThingMap.put(consumedThing.getId(), потребляемыйThing); } } catch (WotException | JSONException ex){ ex.printStackTrace(); } // ПРИМЕР КОДА — ОН БУДЕТ АВТОГЕНЕРИРУЕТСЯ И ПОЛУЧЕН С СЕРВЕРА Строковый код = "ConsumedThing ConsumerThing = ConsumerThingsMap.get(\"urn:uuid:92e5b68f-322a-433a-8cff-f50f6ca1b519\");" + "if(consumedThing!=null){" + "Свойство ConsumedThingProperty = ConsumerThing.getProperty(\"resources\");" + "property.read();\n" + "} еще {\n" + " System.out.println(\"ОШИБКА ВЫПОЛНЕНИЯ: Объект не найден.\");\n" + " }\n;"; // ВЫПОЛНИТЬ КОД ЗДЕСЬ В моем проекте определены классы ConsumedThing, ConsumedThingProperty. Есть ли способ сделать то, что я пытаюсь сделать, или это невозможно? Заранее спасибо, кто мне ответит.
Я пытаюсь внедрить существующий код и выполнить строку дополнительного Java-кода, который использует классы, определенные в моем проекте, и манипулирует данными, предоставленными в моем «скомпилированном» коде. Я пробовал использовать beanshell, но у меня возникли некоторые проблемы с использованием уже существующих классов (кроме проблем с использованием лямбда-функций, оператора алмаза,...). Я знаю, что это совсем небезопасно, но я использую это в целях тестирования. Вот как сейчас выглядит мой код:
DiscoverViewModel viewModel = новый ViewModelProvider(viewModelStoreOwner).get(DiscoverViewModel.class); пытаться { ArrayListвещи = новый ArrayList(); viewModel.getAllThingsLiveData().observe((LifecycleOwner) контекст, вещи::addAll); Map потребляемыйThingMap = новый HashMap(); для (EntityConsumedThings t: вещи) { ConsumedThing ConsumerThing = WotInteraction.getInstance(context).getWot().consume(Thing.fromJson(t.thingJSON)); потребляемыйThingMap.put(consumedThing.getId(), потребляемыйThing); } } catch (WotException | JSONException ex){ ex.printStackTrace(); } // ПРИМЕР КОДА — ОН БУДЕТ АВТОГЕНЕРИРУЕТСЯ И ПОЛУЧЕН С СЕРВЕРА Строковый код = "ConsumedThing ConsumerThing = ConsumerThingsMap.get(\"urn:uuid:92e5b68f-322a-433a-8cff-f50f6ca1b519\");" + "if(consumedThing!=null){" + "Свойство ConsumedThingProperty = ConsumerThing.getProperty(\"resources\");" + "property.read();\n" + "} еще {\n" + " System.out.println(\"ОШИБКА ВЫПОЛНЕНИЯ: Объект не найден.\");\n" + " }\n;"; // ВЫПОЛНИТЬ КОД ЗДЕСЬ В моем проекте определены классы ConsumedThing, ConsumedThingProperty. Есть ли способ сделать то, что я пытаюсь сделать, или это невозможно? Заранее спасибо, кто мне ответит.
Мобильная версия