Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有办法序列化方法调用_Java_Serialization - Fatal编程技术网

Java 有没有办法序列化方法调用

Java 有没有办法序列化方法调用,java,serialization,Java,Serialization,我正在寻找一种方法来记录方法调用,将其存储在数据库中,然后在以后执行它 我想序列化方法调用及其所有参数,存储它,然后检索回来,反序列化并以某种方式执行它 因此,我正在寻找一个通用方法,它允许我存储带有参数的方法调用。差不多 public String myMethod(String arg1, String[] arg2) { logMethodCall(thisMethodName, allMethodArgumentsSerialized) } public void myMeth

我正在寻找一种方法来记录方法调用,将其存储在数据库中,然后在以后执行它

我想序列化方法调用及其所有参数,存储它,然后检索回来,反序列化并以某种方式执行它

因此,我正在寻找一个通用方法,它允许我存储带有参数的方法调用。差不多

public String myMethod(String arg1, String[] arg2) {

  logMethodCall(thisMethodName, allMethodArgumentsSerialized)

}
public void myMethod()
{
    if(condition) ... save it ...
    else myMethodNow();
}

public void myMethodNow()
{
   ... do the work now ...
}
logMethodCall
会将信息存储在数据库中

所以

a) 有没有允许我动态循环方法的所有参数并序列化它们的代码

b) 有动态获取当前方法名称的代码吗


c) 还有其他类似的想法吗?

我以前没有见过这种模式,在这种模式中,您可以保存对数据库的方法调用。我见过延迟的方法调用和节流的方法调用,但它们总是在运行的应用程序中,它们不能持久存在

如果您想在将来执行持久化操作,我认为正确的方法是创建某种操作或编辑对象,就像javax.swing.undo.AbstractUndoableEdit工作一样。然后您可以在任何地方记录这些日志,并在任何地方执行它们。这些措施可以通过几种方式发挥作用,包括:

  • 存储对象类型、方法名和泛型参数,并在以后执行
  • 提供特定参数并调用预先确定的方法名
我将使用第二个基类,就像Swing一样,因此从您的示例中可以看到一个
myMethodAction
类,其对象将参数作为属性,并且知道何时被告知执行
execute
它应该调用
myMethod

我也不会让
myMethod
实现同时做这两件事。这将是一个巨大的头痛以后。我宁愿吃类似的东西

public String myMethod(String arg1, String[] arg2) {

  logMethodCall(thisMethodName, allMethodArgumentsSerialized)

}
public void myMethod()
{
    if(condition) ... save it ...
    else myMethodNow();
}

public void myMethodNow()
{
   ... do the work now ...
}
希望能有所帮助。

这听起来像是一种模式,实际的命令对象将在执行之前被持久化(可能序列化):

命令模式是一种行为设计模式,其中一个对象用于表示和封装稍后调用方法所需的所有信息。此信息包括方法名称、拥有方法的对象以及方法参数的值


嗯,我敢说,处理这种事情的自然语言是Lisp。正如他们所说,“代码=数据”

如果有使用java的需求(例如,如果这是java中较大系统的一小部分),考虑使用ABCL(以JVM为目标的LISP实现)。p>


你可以花很多时间把一个方形的钉子塞进一个圆孔,或者用简单的方法;这是你的选择。我真的不是说这是消极的;这只是一个观察。

有更好的方法来处理这个问题。您是否可以指定您的实际用例,以便我们可以帮助建议一个合适的替代方案?即使您有一个合适的解决方案,稍后再次调用该方法也只会使用相同的参数重新调用相同的方法,这将重新序列化相同的参数和方法名称。那么,重点是什么呢?@JBNizet我打算用一些条件来包装logMethodCall:if(condition){logMethodCall(thisMethodName,allMethodArgumentsSerialized)}else{do rest of code}。。。。或者类似的^^^这将是问题中包含的一些很好的信息。使用命令模式设计代码也提供了更大的灵活性——一定要看一看!