Java 如何正确地泛化此类以避免未检查的警告?

Java 如何正确地泛化此类以避免未检查的警告?,java,generics,Java,Generics,我有一个小小的类,它提供了一个包装器,可以抛出一个异常并返回一个javaslang 2.05(按照惯例,left中有一个失败,而right中有一个正常结果。任何一个都只能是其中之一) 公共类EitherWrapper{ 公共静态或换行(可调用可调用){ 试一试{ 返回.right(callable.call()); }捕获(例外e){ 返回(或)或。左(e); } } } Javadoc forone.leftat 问题是javac标志返回(或)other.left(e)作为未经检查的强制转换

我有一个小小的类,它提供了一个包装器,可以抛出一个异常并返回一个javaslang 2.05(按照惯例,
left
中有一个失败,而
right
中有一个正常结果。任何一个都只能是其中之一)

公共类EitherWrapper{
公共静态或换行(可调用可调用){
试一试{
返回.right(callable.call());
}捕获(例外e){
返回(或)或。左(e);
}
}
}
Javadoc for
one.left
at

问题是javac标志
返回(或)other.left(e)作为未经检查的强制转换(正如javac认为它也是
一样公平),但我真的很想正确地修复它,而不是仅仅强制转换它。我应该如何重写此类以消除警告?

使用来解析正确部分的类型:

return Either.<E, R>left(e);
返回其中一个。左(e);

问题是,您也将
挂起。不管怎样,将
置于异常状态,因此您没有实现泛型所允许的通用性

始终将其固定到
异常
,并具有以下特性:

public static <R> Either<Exception, R> wrap(Callable<R> callable) {
    try {
        return Either.right(callable.call());
    } catch (Exception e) {
        return Either.left(e);
    }
}
publicstaticorywrap(Callable-Callable){
试一试{
返回.right(callable.call());
}捕获(例外e){
返回其中一个。左(e);
}
}

因为已知
包装了
异常
我只想做:

class EitherWrapper {
    public static <R> Either<Exception, R> wrap(final Callable<R> callable) {
        try {
            return Either.right(callable.call());
        } catch (final Exception ex) {
            return Either.left(ex);
        }

    }
}

这会导致编译错误-“
error:(18,38)java:不兼容的类型:java.lang.Exception无法转换为E
”,因为
call()
会引发异常。建议?您可以尝试
返回其中一个。左(e)你测试过你的建议吗?不,我不是Java专家,但在C语言中,我们可以在泛型类上调用静态方法,如下所示:
返回MyGenericClass.StaticMethod()
的正确部分的类型,这是因为
Callable.call()
引发普通异常。我应该添加我自己的功能界面抛出E吗?@Thorbjørnravandersen为什么需要功能界面抛出
E
?好吧,刚才看到diginoise的答案。。。坚持这一点
class EitherWrapper {
    public static <R> Either<Exception, R> wrap(final Callable<R> callable) {
        try {
            return Either.right(callable.call());
        } catch (final Exception ex) {
            return Either.left(ex);
        }

    }
}
final Either<Exception, Object> e = EitherWrapper.wrap(Object::new);