Java 如何用2个泛型类型扩展一个类,并将Spring转换为Autowire实例

Java 如何用2个泛型类型扩展一个类,并将Spring转换为Autowire实例,java,spring,generics,autowired,Java,Spring,Generics,Autowired,我有一个类扩展了另外两个类,如下所示 public class EJBHandler<T extends EJBObject, I extends EJBHome> 我当时做的是创建一个具体的类来扩展EJBHandler类,然后在构造函数中只注入类对象,然后它就可以工作了 我的问题是:为什么在我看来,它应该做同样的事情,而不必有一个具体的类,除了告诉超类T和I的类型之外什么都不做?显然,根据GenericTypeResolver.resolveTypeArgument,泛型类型是

我有一个类扩展了另外两个类,如下所示

public class EJBHandler<T extends EJBObject, I extends EJBHome> 
我当时做的是创建一个具体的类来扩展
EJBHandler
类,然后在构造函数中只注入类对象,然后它就可以工作了


我的问题是:为什么在我看来,它应该做同样的事情,而不必有一个具体的类,除了告诉超类T和I的类型之外什么都不做?

显然,根据
GenericTypeResolver.resolveTypeArgument
,泛型类型是无法解决的。如果放置断点并跟踪该方法,您将看到这就是它返回null的原因。不要尝试将共存的
EJB
(尤其是对于home和Objects)和
Spring
放在一起。它会失败。为什么你说@MarclebiAnaperly,根据
GenericTypeResolver.resolveTypeArgument
,泛型类型是不可解析的。如果放置断点并跟踪该方法,您将看到这就是它返回null的原因。不要尝试将共存的
EJB
(尤其是对于home和Objects)和
Spring
放在一起。它会失败的。你为什么这么说@MarcLeBihan
@Autowired
    private EJBHandler<SystemUser, SystemUserHome> systemUserEjb;
    @Autowired
    private EJBHandler<Authentication, AuthenticationHome> authenticationEjb;
    protected Class<T> ejbObject;
    protected Class<I> ejbHomeClass;
    @SuppressWarnings("unchecked")
    protected void EJBHandler() {
        ejbObject = (Class<T>) GenericTypeResolver.resolveTypeArgument(getClass(), EJBHandler.class);
        ejbHomeClass =(Class<I>) GenericTypeResolver.resolveTypeArgument(getClass(), EJBHandler.class);

        if(useExternalDependencies) {
            try {
                Object homeObject = createHomeObject(ejbObject.getSimpleName(), "SomeServerHere");
                this.homeObject = (I) PortableRemoteObject.narrow(homeObject, ejbHomeClass);
            } catch (NamingException e) {
                e.printStackTrace();
            }
        }
    }

 protected Object createHomeObject(String jndiName, DeployedServer server) throws NamingException {
        Context ctx = new InitialContext(getProperties(server));
        Object homeObject = ctx.lookup(jndiName);
        log.debug("Found [{}] bean in context on server [{}].", jndiName, server);
        return homeObject;
    }