Java 可调用Dao动态方法

Java 可调用Dao动态方法,java,multithreading,class,jpa,callable,Java,Multithreading,Class,Jpa,Callable,我需要这样做: @Override public Foo call() { this.startOperation(); } final MyDAO dao = ...; Callable<Foo> callable = new Callable<>() { @Override public Foo call() { return dao.someMethod(1, 2, 3); } }; 创建可

我需要这样做:

@Override
    public Foo call() {
        this.startOperation();
    }
final MyDAO dao = ...;
Callable<Foo> callable = new Callable<>() {
    @Override
    public Foo call() {
        return dao.someMethod(1, 2, 3);
    }
};
创建可调用的,并将其传递给ThreadPoolExecutor。可调用的实际上是一个Dao,它应该执行不同的函数。因为不可能直接将参数传递给call()函数,所以我考虑这样做,在创建对象时立即执行代码:

创建这样的类:

public class FooRecordDatabaseInsert {
    static {
        //execute some code
    }
}
callable现在可以如下所示:

@Override
    public Foo call() {
        this.startOperation();
    }
final MyDAO dao = ...;
Callable<Foo> callable = new Callable<>() {
    @Override
    public Foo call() {
        return dao.someMethod(1, 2, 3);
    }
};
但我必须传递参数,就像一个实体传递给这个类一样。 是否有可能创建一个类,该类有一个带参数的函数,在创建对象时立即执行该函数


或者可能有完全不同的解决方案吗?

您应该更喜欢使用以实体作为参数的构造函数。

如果我理解正确,您需要一个调用DAO的方法并带有参数的可调用函数

所以你想要这样的东西:

@Override
    public Foo call() {
        this.startOperation();
    }
final MyDAO dao = ...;
Callable<Foo> callable = new Callable<>() {
    @Override
    public Foo call() {
        return dao.someMethod(1, 2, 3);
    }
};
final MyDAO=。。。;
Callable Callable=new Callable(){
@凌驾
公共Foo call(){
返回dao.somethod(1,2,3);
}
};
这称为匿名内部类,在执行高级、复杂、多线程操作之前,您应该明确了解它们

使用Java 8,您可以使用lambdas使事情变得更简单:

MyDAO dao = ...;
Callable<Foo> callable = () -> dao.someMethod(1, 2, 3);
MyDAO=。。。;
Callable Callable=()->dao.someMethod(1,2,3);

但返回异常又如何呢?这可以通过构造函数实现吗?您的类应该有一个实体私有字段。构造函数将仅使用实体参数设置该字段的值。可能导致异常的处理将在调用方法中。当然,您可以在那里抛出异常。这绝对是完美的,从未考虑过这样的解决方案。我将阅读有关匿名内部类的内容,非常感谢!