whyyouhitme_ 2019-01-02 21:11 采纳率: 57.1%
浏览 1589
已采纳

关于为什么有的代码上会弹出红波浪要求try catch

之前基础不是很扎实。尤其try catch这块
这是一段更新索引库的代码。功能是在更新商品,并在avtiveMQ发送了消息后,随之更新索引库里的信息

public TaotaoResult updateSearchItemById(Long itemId) throws Exception{
        //注入mapper
        //查询到记录
        SearchItem item = mapper.getSearchItemById(itemId);System.out.println("查询到了商品"+item.getTitle());
        //把记录更新到索引库
            //创建solrserver 注入进来
            //创建solrinputdocument对象
            SolrInputDocument document = new SolrInputDocument();
            //向文档对象中添加域 
            document.addField("id", item.getId().toString());//这里是字符串需要转换
            document.addField("item_title", item.getTitle());
            document.addField("item_sell_point", item.getSell_point());
            document.addField("item_price", item.getPrice());
            document.addField("item_image", item.getImage());
            document.addField("item_category_name", item.getCategory_name());
            document.addField("item_desc", item.getItem_desc());
            //向索引库中添加文档
            solrServer.add(document);
            //提交    
            solrServer.commit();System.out.println("更新了索引");
        return TaotaoResult.ok();
    }

这里执行这两句的时候

    solrServer.add(document);
    solrServer.commit();System.out.println("更新了索引");

并未弹出红线和要求try catch
但是在我自己完成同步删除索引库的时候

public TaotaoResult deleteSearchItemByIds(List<Long> asList) {
        for(Long id: asList){
            String id2=id+""; 
            try {
                solrServer.deleteById(id2);
            } catch (SolrServerException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            try {
                solrServer.commit();
            } catch (SolrServerException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

solrServer.deleteById(id2);和solrServer.commit();这两句他要求try..catch包围。这是为什么?

另问。消息监听器把消息转化成了ObjectMessage。长整型数组。然后用Arrays.asList转化为长整型列表。但是solrServer的deleteById方法中,没有接收这种参数的。只有接收List<String> list的。和单个String id的,所以我又用for循环转化成String,然后才调用DeleteById进行删除。总感觉这样很笨。请问官方的,高手的写法是什么?就单单删除索引库这块。

  • 写回答

3条回答 默认 最新

  • threenewbee 2019-01-02 15:33
    关注

    因为你调用了函数,是throws Exception
    也就是它已经声明了它可能丢出异常,那么它不写try catch就可以。
    你的函数没有throws,那么就是不会丢出异常,而你函数内部调用的函数又是会丢出异常的,这两者就矛盾了。要么用try catch接住,要么你也throws把异常继续向上丢出

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 关于#python#的问题:自动化测试