2017-10-13 45 views
0

在泛型静态函数中,我只有泛型类型,可以获得泛型类之一的Class?从静态函数中获取泛类

这里我的代码:

 public static <A extends ResultError, B, A1 extends ResultError, B1> Function1<Either<A, B>, 
       Either<A1, B1>> transformConnectorErrorVoToCommandError(Event event) { 
      return new AbstractFunction1<Either<A, B>, Either<A1, B1>>() { 

       @Override 
       public Either<A1, B1> apply(Either<A, B> parameter) { 
        if (parameter.isRight()) { 
         return mapsRightSide(parameter); 
        } else { 
         return mapsLeftSide(parameter, event, ${I NEED THE CLASS OF A HERE}); 
        } 
       } 

       Either<A1, B1> mapsRightSide(Either<A, B> parameter) { 
        return right(parameter.right().get()); 
       } 

       Right right(Object result) { 
        return new Right<>(result); 
       } 

      }; 
     } 

private static <A extends ResultError, B, A1 extends ResultError, B1> Either<A1, B1> mapsLeftSide(Either<A, B> parameter, 
                             Event event, 
                             Class<A1> outputErrorClass) { 
     initLazyMapperComponent(); 
     A sourceError = parameter.left().get(); 
     A1 destinyError = mapper.map(sourceError, outputErrorClass); 
     if (destinyError != null) { 
      return left(destinyError); 
     } 
     ExceptionUtil.throwNotHandledError(event, sourceError); 
     return null; 
    } 

的一部分,我需要在代码是${I NEED THE CLASS OF A HERE}我知道,在非静态函数it's可以,但不知道是否可以在一个静态的方式来完成。

问候。

+0

该方法是否为“静态”并不重要。不可能。 – Holger

+0

是啊,你可以https://stackoverflow.com/questions/3437897/how-to-get-a-class-instance-of-generics-type-t – paul

+0

你有一个答案的链接,做一些不同于需要一个'Class'对象,由知道类型的客户端代码提供(当然,它也可以使用'static'方法)? – Holger

回答

2

不,您不能在那里获得A的课程。它在运行时全部被擦除。

典型的选项是从A实例的值中获得A的类型,无论如何您可能在parameter中获得该值。

或通过Class<A> classOfA作为另一个参数。

+0

是的,这就是我所做的。我只是想知道是否有任何神奇的方式XD – paul

+0

@paul Nope。不。 – lexicore