Java泛型:为每个内部类构建参数化类

Java泛型:为每个内部类构建参数化类,java,generics,Java,Generics,假设我有一个界面: public interface Authentication<T> { public void authenticate(T token); } 显然,仅仅用clazz代替T是行不通的 如何将类型从clazz输入到身份验证接口的参数化实现中?如果我理解正确,您希望对clazz类的令牌进行身份验证。然后,您需要使用泛型类类型参数化factory方法参数: private <T> Authentication<T> createAut

假设我有一个界面:

public interface Authentication<T> {
   public void authenticate(T token);
}
显然,仅仅用
clazz
代替
T
是行不通的


如何将类型从clazz输入到身份验证接口的参数化实现中?

如果我理解正确,您希望对
clazz
类的令牌进行身份验证。然后,您需要使用泛型类类型参数化factory方法参数:

private <T> Authentication<T> createAuthenticationImplClass(Class<T> clazz){
    return new Authentication<T>() {
        @Override
        public void authenticate(T token) throws Exception {
            //do something with the token
        }
    };
}

如果我理解正确,您希望对
clazz
类的令牌进行身份验证。然后,您需要使用泛型类类型参数化factory方法参数:

private <T> Authentication<T> createAuthenticationImplClass(Class<T> clazz){
    return new Authentication<T>() {
        @Override
        public void authenticate(T token) throws Exception {
            //do something with the token
        }
    };
}

你可以这样做

private <T extends Class<?>> Authentication<T> createAuthenticationImplClass(T clazz){
  return new Authentication<T>() {
     @Override
     public void authenticate(T token) throws Exception {
        //do something with the token
     }
   };
}

private您可以这样做

private <T extends Class<?>> Authentication<T> createAuthenticationImplClass(T clazz){
  return new Authentication<T>() {
     @Override
     public void authenticate(T token) throws Exception {
        //do something with the token
     }
   };
}


private我想你的意思是
authenticationcreateauthenticationmplclass(Class clazz)
。不。因为接下来我们将传递给
身份验证
T
的实例。我希望在那里上课。。。或者不。。。嗯,我很确定。你想通过
课程
并获得
认证
,而不是
认证
。我真的必须再次让你失望。感谢您分享关于潜在错误的想法,这是由模糊的操作描述引起的,但我的第一个回答是关于
身份验证
如果您相信与否。;-。是的。我对OP问题的理解是OP需要一个
身份验证
,但是如果你对问题的理解不同,那没关系。我认为你的意思是
身份验证createAuthenticationImplClass(Class clazz)
。不。因为接下来我们将传递给
身份验证
T
的实例。我希望在那里上课。。。或者不。。。嗯,我很确定。你想通过
课程
并获得
认证
,而不是
认证
。我真的必须再次让你失望。感谢您分享关于潜在错误的想法,这是由模糊的操作描述引起的,但我的第一个回答是关于
身份验证
如果您相信与否。;-。是的。我对OP的问题的理解是OP想要一个
身份验证
,但是如果你以不同的方式来理解这个问题,那很好。好吧,我看到了问题,但是他可以用显式调用代替循环,比如
createAuthenticationImplClass(TokenType1.class)保留类型安全性,但失去可扩展性。好的,我在自言自语。有人刚刚删除了Comments在这种情况下,为什么需要传入
clazz
(未使用)?类不是,但泛型参数是Yeah,但泛型参数由调用方确定(显式或隐式)。我想说的是,如果您删除它,它仍然可以工作(调用方可能需要显式地指定参数)。也就是说,当然,假设OP根本不需要在方法中使用类(他没有说,但我实际上认为他需要它,因为否则它将使这个方法无法做很多事情)好的,我明白你的意思,并且同意。这是原始问题的遗留问题,可以简化为
AuthenticationAuthforTokenType=createAuthenticationImplClass()我看到了问题所在,但他可以用显式调用代替循环,比如
createAuthenticationImplClass(TokenType1.class)保留类型安全性,但失去可扩展性。好的,我在自言自语。有人刚刚删除了Comments在这种情况下,为什么需要传入
clazz
(未使用)?类不是,但泛型参数是Yeah,但泛型参数由调用方确定(显式或隐式)。我想说的是,如果您删除它,它仍然可以工作(调用方可能需要显式地指定参数)。也就是说,当然,假设OP根本不需要在方法中使用类(他没有说,但我实际上认为他需要它,因为否则它将使这个方法无法做很多事情)好的,我明白你的意思,并且同意。这是原始问题的遗留问题,可以简化为
AuthenticationAuthforTokenType=createAuthenticationImplClass()为什么需要将类传递到方法中?为什么需要将类传递到方法中?
private <T> Authentication<T> createAuthenticationImplClass(Class<T> clazz){
  return new Authentication<T>() {
     @Override
     public void authenticate(T token) throws Exception {
        //do something with the token
     }
   };
}