泛型异常使用及代码解析

由于擦除的原因,catch语言不能捕获泛型类型的异常(编译、运行期都需要知道切确类型);那么我们该如何使用泛型的异常呢?直接分析源代码如下:

1.先是定义了一个接口:此接口中含有处理List<T>的Process方法,且此方法能抛出E类型的异常;

interface Processor<T,E extends Exception>//这里是T和(E extendsException)其中E是继承于异常;

{

      voidprocess(List<T> resultCollector) throws E;

}

2.定义了一个类class ProcessRunner<T,E extends Exception>这个类继承了ArrayList<Processor<T,E>>(多少一句,这里<T,E>其实也是代表<T,E extends Exception>,因为前面已经写了,所以这边就不需要了,只要简单的写<T,E>)用于综合处理存放的Processor<T,E>,每个Processor<T,E>都被process方法处理(for循环);里面有一个processAll()方法。

class ProcessRunner<T,E extends Exception> extendsArrayList<Processor<T,E>>

{

      List<T>processAll() throws E{

        List<T> resultCollector=new  ArrayList<T>();用于接受个process处理完以后的数据;

        for(Processor<T,E> processor:this){

          processor.process(resultCollector);

        }

        return resultCollector;

      }

 

}

 

 

3.将泛型Class实体化:

定义了一个继承Exception的Failure2;

class Failure2extends Exception

{

}

4.用Processor2类实现了Processor<Integer,Failure2>,内部主要实现了process方法,该方法主要用于处理List<integer>;这种方法可以自由发挥;

class Processor2 implements Processor<Integer,Failure2>

{

      static int count=2;//此处的count是一个静态的,有所有Processor2共享!

      public void process(List<Integer>resultCollector) throws Failure2{

        if(count--==0){

          resultCollector.add(47);

         }

        else{

          resultCollector.add(11);

         }

       if(count<0){

          throw new Failure2();

         }

 

      }

}

 

5.最后通过new一个 ProcessRunner<String,Failure1>()变量名:runner,然后里面存放几个Processor1

 

public classThrowGenericException

{

      public static voidmain(String[] args){

      ProcessRunner<String,Failure1>runner=new ProcessRunner<String,Failure1>();

    for(int i=0;i<3;i++){

             runner.add(newProcessor2());

        }

 

        try{

        System.out.println(runner.processAll());

       

        }catch(Exception E){

          System.out.println(E);

        }

 

     

      }

}

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值