问:我有一个Windows服务,它产生了很多子进程.似乎有一些限制,大约100,这个过程无法启动.CreateProcess()调用带有pid返回,但是然后该过程无法实现.如果我将服务器作为控制台应用程序运行,则此限制将消失.另外,如果我设置了DETACHED_PROCESS标志,则此限制会增加一倍以上.但是,如果我设置DETACHED_PROCESS并调用CreateProcesssWithLogonW(),我会失败.
我想像在Jackson中使用@JsonUnwrapped一样,使用合成模式来重用类的公共部分,而不在mongodb文档中添加额外的结构级别,例如:
class A {
int x; int y;
}
class B {
@JsonUnwrapped
A a;
}
class C {
@JsonUnwrapped
A a;
}
Run Code Online (Sandbox Code Playgroud)
这样,当B或C存储在mongodb中时,它看起来像:
{ x:123, y:456 }
Run Code Online (Sandbox Code Playgroud)
代替
{ a: { _class:"A", x:123, y:456 } }
Run Code Online (Sandbox Code Playgroud)
不幸的是,我在spring-data-mongodb注释或核心spring数据注释中找不到合适的注释。是否存在?我知道这必然使A子结构的多态性成为不可能。
我使用反射来发现类及其超类的方法,以及方法参数和返回值的类型。这大部分都有效,但我在处理一些特定的通用情况时遇到了麻烦。假设我有一个基类:
package net.redpoint.scratch;
public class Base<E> {
public E getE() { return null; }
}
Run Code Online (Sandbox Code Playgroud)
还有一个子类:
package net.redpoint.scratch;
public class Derived extends Base<String> {}
Run Code Online (Sandbox Code Playgroud)
使用反射,我可以遍历 Derived 的方法并获取 arg 和返回类型(代码省略,但工作正常)。不过,我也想知道继承的方法。使用下面的代码,我可以非常非常接近。但是我无法获得 getE() 的正确返回类型。我可以获得通用类型“E”,但不能获得实际类型“java.lang.String”:
package net.redpoint.scratch;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;
public class Scratch {
public static void main(String[] args) throws Exception {
Class clazz = Class.forName("net.redpoint.scratch.Derived");
Type superType = clazz.getGenericSuperclass();
if (superType instanceof ParameterizedType) {
ParameterizedType superPt = (ParameterizedType)superType;
Type[] typeArgs = superPt.getActualTypeArguments();
Type t0 = typeArgs[0];
// This …
Run Code Online (Sandbox Code Playgroud)