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 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)