从静态函数中的泛型中获取Class

时间:2017-10-13 07:23:20

标签: java java-8

有一个通用的静态函数,我只有通用类型,有可能获得其中一个泛型的类吗?

这是我的代码:

     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}我知道在非静态函数中它是可能的,但不知道是否可以以静态方式完成。

问候。

1 个答案:

答案 0 :(得分:2)

不,你不能在那里获得A的课程。它在运行时都被删除了。

典型的选项是从A的{​​{1}}实例的值中获取A的类型。

或者将parameter作为另一个参数传递。