当前位置: 首页 > 知识库问答 >
问题:

有没有办法反序列化Runnable?[重复]

乐正迪
2023-03-14

背景:

所以我有一个方法调用,我想保存到一个文本文件中。这样做的目的是将可运行的序列化对象保存到文本文件中,并在以后从文本文件中获取要执行的对象

final Runnable runnable = () -> { //Runnable object to serialize
      client.publish("me/feed", GraphResponse.class,
                        Parameter.with("message", statusMessage));
 };

final String gson = new Gson().toJson(runnable); // Serialized runnable as json. This works successfully.

final Runnable x = new Gson().fromJson(gson, Runnable.class); // error

错误是:

java.lang.RuntimeException: Unable to invoke no-args constructor for interface java.lang.Runnable. Registering an InstanceCreator with Gson for this type may fix this problem.

我理解错误,Runnable是一个接口,它不能被序列化。然而,我还能做些什么来解决我的问题吗?

解决方案尝试1。错误

public class RunnableImplementation implements Runnable, Serializable {

Runnable runnable;

public RunnableImplementation() {

}

public RunnableImplementation(final Runnable runnable) {
    this.runnable = runnable;
}

@Override
public void run() {
    runnable.run();
  }
}

public class ExampleClass {

public static void main(String[] args) {
    final Runnable runnable = () -> {
        client.publish("me/feed", GraphResponse.class,
                Parameter.with("message", statusMessage));
    };

    RunnableImplementation x = new RunnableImplementation(runnable);

    String gson = new Gson().toJson(x);
    RunnableImplementation runnableImplementation = new Gson().fromJson(gson, RunnableImplementation.class); // causes same error as above
}
}

共有1个答案

穆嘉
2023-03-14

我可以向您推荐的一种盲目尝试是创建一些runnable的实现,并用它来尝试您的代码。例如:

    public class Main {

    public static void main(String[] args) {

        Runnable a = new A();

        String gson = new Gson().toJson(a);
        Runnable runnable = new Gson().fromJson(gson, A.class);

        runnable.run();
    }

    public static class A implements Runnable{

        public void run() {
            System.out.println("Here im");
        }



    }
}

顺便说一句,更换我的系统。出来println(“我在这里”) 您的客户编写。发布

 类似资料:
  • 问题内容: 在使用Nest构建我的Elasticsearch查询时,我希望能够看到发送到Elasticsearch的JSON版本。这可能吗?我想是某种解串器。 这是我的后续问题的信息: 问题答案: 对。您可以像这样使用ElasticClient公开的序列化器: 您也可以直接使用Newtonsoft或任何JSON库来序列化查询对象。不过,在ElasticClient中使用序列化器(本质上是包装New

  • 问题内容: 我有一个使用处理程序发布可运行实例的线程。它工作得很好,但是我很好奇我如何将参数传递给Runnable实例使用?也许我只是不了解此功能的工作原理。 为了避免出现“您为什么需要此问题”的问题,我有一个线程化的动画,必须调出UI线程来告诉它实际绘制的内容。 问题答案: 只需使用接受参数的构造函数实现的类就可以了, 您可以使用参数化构造函数创建Runnable类的实例。

  • 我试图找到一种通过json和spring mvc 3.1传递复杂对象的方法。我也在使用knockoutjs,所以将ko.tojson等效为json.stringify。 部署 以下是ajax调用: spring控制器代码如下所示: 使用适当的公共getter/setter。 当我尝试进行这个调用时,我得到一个错误400客户机发送的请求语法不正确()。 复杂对象都是通过json get早些时候获得的

  • 问题内容: 我在实现Runnable的类中的run()中调用的方法被设计为引发异常。 但是Java编译器不允许我这样做,建议我用try / catch包围它。 问题是,通过用try / catch包围它,我使 特定的 run()无效了。我 确实 想抛出该异常。 如果我指定的run()的本身,编译器会抱怨说。 通常,我对run()不会抛出异常完全满意 。但是,在我必须具有该功能的特殊情况下。 如何解

  • 我在实现Runnable的类的run()中调用的方法被设计为引发异常。 但是Java编译器不允许我这样做,建议我用try/catch来围绕它。 问题是,通过使用try/catch将其包围,我使特定的run()变得无用。我确实想抛出该异常。 如果我为run()本身指定了throws,编译器会抱怨异常与Runnable中的throws子句不兼容。run()。 通常情况下,我完全可以不让run()抛出异

  • 问题内容: 我正在寻找一种将POJO直接转换为JacksonTreeModel的方法。我知道存在从POJO到JSON-String的转换,并且支持TreeModel到JSON-String的转换—但是我正在寻找POJO到TreeModel的转换。有办法吗? 用例如下: 服务器端模板是使用Mustache的Java实现完成的。这使用了Jackson的TreeModel。 之后,我需要在客户端上精简版