当前位置: 首页 > 面试题库 >

如何传递清单 一种方法?

孔光赫
2023-03-14
问题内容

我有一个Servlet,它传递查询参数,从DAO获取对象列表,将列表转换为JSON,然后将其发送回响应中。每个列表由具有方法的对象组成:

public String getAsJson(){...}

html" target="_blank">servlet有很多类似的方法,它们看起来像:

private String getUserListAsJson() {
    List<User> userList = this.dao.getUsers();
    StringBuilder builder = new StringBuilder();
    builder.append('[');
    // loops over the list appending the value of each objects getAsJson()
    builder.append(']');
    return builder.toString();
}

问题是我有大约6种方法(并且正在增长),除了不同的DAO查询外,它们看起来完全一样。我的想法是创建一个仅具有getAsJson()方法的定义的接口,使每个bean实现该接口,然后在Servlet中使用另一个方法来获取实现该接口的对象。最终看起来像这样:

public Interface JsonEnabled {
    public String getAsJson();
}

public class User implements JsonEnabled {
    ....
    @Override
    public String getAsJson() {...}
}

public class TheServlet {
    ...
    private String getUserListAsJson() {
        List<User> userList = this.dao.getUsers();
        return this.getListAsJson(userList);
    }
    private String getListAsJson(List<? implements JsonEnabled> list) {
        // The loop code that is in each method.
    }
}

所以,如果有人实际上已经读到了这里= P,即不编译和甲骨文找了一些资料后,你只能有 延伸 ,而不是 工具
的泛型参数。使所有类都从仅具有getAsJson()方法的Abstract类进行扩展在语义上没有意义(这些类无关)。

我还没有在SO上找到一个好的解决方案,或者只是四处搜寻,所以我们将不胜感激。


问题答案:

对于通用通配符,关键字extends对类和接口均有效:

private String getListAsJson(List<? extends JsonEnabled> list) { ... }

extends 当用于定义泛型边界时,它的含义略有不同-本质上是翻译为“是,或者是扩展或实现”。



 类似资料:
  • 问题内容: 我可以将简短的清单传递给一种简洁的方法吗?这是我正在尝试做的事情: 问题答案: 是。您可以这样操作: 在Python中运行此命令可以确认产生相同的结果:

  • 问题内容: 我必须在testng中编写以下单元测试用例: saveProductTest如果产品详细信息成功保存在数据库中,则将返回productId。 ModifyProductTest,它应该使用以前保存的productId作为参数。 我正在使用testNg数据提供程序从XML文件中获取saveProductTest的产品详细信息输入(PrdouctName,ReleaseDate)和Modi

  • 好的,伙计们,我对java和编程是全新的,我已经能够完成我的课上的家庭作业。但我需要为我的最后一个项目创建一个程序。这只是它的开始,但我决定写一个程序,记录酒吧库存,因为我是一个酒保。我不知道如何将“LiquorCost”和“LiquorCount”数据传递给main方法下面的“getCostTotal”方法。我绝对肯定这是一件相当简单的事情,我做错了,但我就是想不出来。任何帮助都很感激。 我的酒

  • 问题内容: 我创建一个这样的列表列表: 然后,我想在第一个子列表中插入10,如下所示: 但是,出现以下错误: 线程“主”中的异常java.lang.IndexOutOfBoundsException:Index:0,Size:0 at java.util.ArrayList.rangeCheck(ArrayList.java:653)at java.util.ArrayList.get(Array

  • 这是我的第一个Java应用程序。我正在尝试创建一个产品(键)和它们的价格(值)的地图。文档上说我不能用doubles换钱,所以我得用bigdecimal。我现在完全不知道如何在我的方法和地图中使用BigDecimal。 寄存器类: 主类:

  • 在vue3中,如何实现定义的function传递(比如我在demo.vue页面写了一个function init(){} 的方法,里面写了内容,但是我在另外一个组件里面定了一个按钮,点击这个按钮,就会调用在demo.vue 里面的init()方法)。我试过用emitter.emit/emitter.on 这个办法貌似不可取,求指教谢谢~