Я занимаюсь программным анализом программ на Java с сажей. Я настраиваю класс, который включает поле типа SootMethod. Я хочу сохранить большое количество этих объектов и использовать их в другой программе. Итак, я считаю, что сериализация соответствует моим требованиям. Однако это вызывает NotSerializableException из-за SootMethod.
Что мне делать, если я хочу сохранить объекты с этим полем SootMethod? Почему SootMethod не сериализуем?




Вероятно, это связано с тем, что доза SootMethod не реализует java.io.Serializable, поэтому сериализовать экземпляр этого класса невозможно, поэтому, если вы хотите сериализовать объект, содержащий поле типа SootMethod, у вас есть 2 способа:
transient! поэтому можно сериализовать объект, но когда вы десериализуете объект, это поле будет нулевым.SootMethod сериализуемым, реализовав java.io.Serializable для этого класса.Как правило, класс может быть сериализован, если реализует интерфейс java.io.Serializable, и все поля также реализуют этот интерфейс, и если поле не реализует его, поэтому это поле должно быть временным.
Спасибо за ваш ответ. Мне просто любопытно, почему этот метод не предназначен для сериализации. В сажи есть много других классов, которые можно сериализовать (например, Unit, Body и т. д.). Однако SootMethod - нет. На этой (sable.mcgill.ca/soot/doc/soot/class-use/SootMethod.html) веб-странице, которая знакомит с использованием SootMethod, говорится: «Сериализацию следует избегать с помощью статического анализа, поскольку каждый объект возникает из одного и того же места». Кажется, что этот класс предназначен для установки как несериализуемый. Почему?
Я бы разместил ваш вопрос в списке рассылки Soot: sable.mcgill.ca/mailman/listinfo/soot-list