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是。