Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 避免捕获泛型异常并使用泛型接口_Java_Oop_Generics_Exception_Exception Handling - Fatal编程技术网

Java 避免捕获泛型异常并使用泛型接口

Java 避免捕获泛型异常并使用泛型接口,java,oop,generics,exception,exception-handling,Java,Oop,Generics,Exception,Exception Handling,我有一个需求,其中我有一个通用接口来将一个实体转换为另一个实体 public interface Converter<T,U>{ public U convert(T src) throws Exception; } 公共接口转换器{ 公共U转换(TSRC)抛出异常; } 和实现类 class StringToIntConverterImpl implements Converter<String,Integer>{ public Integer co

我有一个需求,其中我有一个通用接口来将一个实体转换为另一个实体

public interface Converter<T,U>{
    public U convert(T src) throws Exception;
}
公共接口转换器{
公共U转换(TSRC)抛出异常;
}
和实现类

class StringToIntConverterImpl implements Converter<String,Integer>{
    public Integer convert(Integer i) throws StringConversionException;
}
类StringToIntConverterImpl实现转换器{
公共整数转换(整数i)抛出StringConversionException;
}
现在在我的代码中我使用

public class AppClass{
    private Converter<String,Integer> converter;
    public static void mainAppLogic(){
        try{
            converter.convert(input);
        }
        catch(Exception e){
        }
    }
}
公共类AppClass{
专用变频器;
公共静态void mainAppLogic(){
试一试{
转换器。转换(输入);
}
捕获(例外e){
}
}
}

在这里,我必须捕获一般异常,如何避免这种情况?同时,我想在我的主应用程序中使用Converter Converter DePartion,而不是特定的Converter类,因为我想编程到接口,以便以后可以切换转换器的任何实现。

您可以使用通用异常:

public interface Converter<T, U, E extends Throwable> {
    U convert(T t) throws E;
}
公共接口转换器{
U转换(T)抛出E;
}
现在,在主方法中,您可以:

public class AppClass{
    private Converter<String,Integer,RuntimeException> converter;
    public static void mainAppLogic(){
        converter.convert(input);
    }
}
公共类AppClass{
专用变频器;
公共静态void mainAppLogic(){
转换器。转换(输入);
}
}

您可以创建一个名为
ConversionException
的接口或基类,并让所有转换器抛出它的任何实现或子类。通过这种方式,您可以捕获
ConversionException
而不是
Exception
,或者您可以使用运行时异常,就像现在所有现代类所做的那样,尤其是当它是一个要用作lambda的函数接口时。顺便说一句,您的接口已经存在:。第二个代码块中接口的实现是否存在编译时错误?不应该是
public Integer convert(String si)抛出StringConversionException
@SukhpalSingh您是否建议StringConversionException扩展ConversionException?而ConversionException扩展了异常。@user1846749是。