我在java中有以下情况:我有一个名为"A"的接口,需要由程序启动后动态加载的类实现.让我们称它为B.这个接口提供x(多于1个)方法.让我们从()到z()调用em.现在我必须将这个类包装一段时间来测量和控制问题并在它自己的线程中运行它以便能够在需要太长时间时将其杀死.因此我发明了包含B的C类,因为B本身并没有实现runnable.下一部分是原始程序应该调用的类.新的D类D也实现了接口A以隐藏模型中的整个控制部分.现在我必须在D中包装接口的方法并将它们发送到C并将其解包给C,后者将它们解包并在对象B上执行它们.我希望我能够很好地解释它.
这里有一些我想象的示例代码可以是:
public class D implements A {
private C ai;
public D(String aiName) {
ai = new C("trivialKi");
}
private void call(parameters, ORIGIN_METHOD origin) {
AiTaskExecutor task = new AiTaskExecutor(parameters, origin, ai);
FutureTask<Long> tsk = new FutureTask<Long>(task);
Thread thread = new Thread(tsk);
thread.start();
if (abort) {
tsk.cancel(true);
}
}
@Override
public void a(g g, f f, t t) {
call(g, f, t, ORIGIN_METHOD.a);
}
@Override
public void b(g g, t t, h h) {
call(g, t, h, ORIGIN_METHOD.b);
} …Run Code Online (Sandbox Code Playgroud) 我目前开始使用 micronaut 和 kotlin。我有 JPA 查询,结果大约有 100 万个。这些结果我想从这个 micronaut 服务流到另一个。
我的查询返回 aallQuery.resultStream类型java.util.stream。
发送服务的控制器:
@Get("/test{value1,value2,value3}")
fun getTestObjects(
value1: String,
value2: String,
value3: String
): Stream<TestObject> {
val entries = testRepository.findAllWhere(value1, value2, value3)
return entries
}
Run Code Online (Sandbox Code Playgroud)
接收服务的客户:
@Get("/data/test{value1,value2,value3}")
override fun getTestObjects(alue1: String,
value2: String,
value3: String) : Stream<TestObject>
Run Code Online (Sandbox Code Playgroud)
JPA 查询如下所示:
val cb = entityManager.criteriaBuilder
val cq = cb.createQuery(TestObject::class.java)
val rootEntry = cq.from(TestObject::class.java)
val predicates = mutableListOf<Predicate>()
predicates.add(cb.like(rootEntry.get<String>("value1"), value1))
predicates.add(cb.equal(rootEntry.get<String>("value2"), value2))
predicates.add(cb.equal(rootEntry.get<Int>("value3"), value3))
val cqAllWhere = cq.select(rootEntry)
.where(cb.or(*predicates.toTypedArray()))
val …Run Code Online (Sandbox Code Playgroud) 在:https : //stackoverflow.com/a/11138229/1270045 中提出的解决方案 在 java 中工作得很好,但我在 kotlin 中。在这里我如何将谓词数组传递给用 kotlin 编写的标准构建器?
所以它是关于在 kotlin 中写这个我可以传递的:
cq.select(customer).where(predicates.toArray(new Predicate[]{}));
Run Code Online (Sandbox Code Playgroud)
我的示例代码:
val predicates = mutableListOf<Predicate>()
if (XYZ != null) {
val XYZPath = element.get<Long>("XYZ")
predicates.add(criteriaBuilder.equal(XYZPath, XYZ))
}
criteriaQuery.select(element)
.where(criteriaBuilder.or(???))
Run Code Online (Sandbox Code Playgroud)