当前位置: 首页 > 知识库问答 >
问题:

如何使用更具体的泛型类型扩展参数化抽象类?

须彭亮
2023-03-14

我不熟悉泛型。我有一个抽象类(1)和一个抽象方法。我有另一个抽象类(2)和一些抽象方法,我希望在一些DTO(3,4)中共享这些抽象方法。我想要一个(1)的具体扩展来处理任何扩展(2)的东西。

1.

//I want R to be anything here
public abstract class AggregatedEmailerRoute<R> extends RouteBuilder {

    public static String EMAILER_ROUTE = "direct:aggregated-emailer-route";
    
@Override
    public void configure() throws Exception {
        from(EMAILER_ROUTE)
                .bean(this, "convertToEmailBody(${body},${headers})")
                .to("mock:wherever");
    }

    protected abstract String convertToEmailBody(List<R> body, Map<String,Object> headers);
public abstract class StagingError { //or should this be an interface?
    public abstract Integer getId();
    public abstract String getErrorNote();
    public abstract LocalDateTime getErrorDate();
}

扩展StagingError的两个类:3.

public class Bill extends StagingError {

    private Integer id;
    private String errorNote;
    private LocalDateTime getErrorDate;
    //other fields, getters/setters

public class Payment extends StagingError {

    private Integer id;
    private String errorNote;
    private LocalDateTime getErrorDate;
    //other fields, getters/setters

public class StagingEmailErrorRoute extends AggregatedEmailerRoute<R extends StagingError> {

    @Override
    public void configure() throws Exception {
        super.configure();

        from(jpa(Bill.class.getName())
                .query("some query")
        )
                .to(EMAILER_ROUTE);

        from(jpa(Payment.class.getName())
                .query("some other query")
        )
                .to(EMAILER_ROUTE);

    }


@Override //But here I want to work on anything that implements StagingError so this method can work on Payment OR Bill 
    protected String convertToEmailBody(List<T extends StagingError> body, Map<String,Object> headers) {
        return 
                body
                .stream()
                .map(e -> "Staging entity ID: " + e.getId() +
                            "\n\tError: " + e.getErrorNote() +
                            "\n\tWhen: " + format("%tc",e.getErrorDate().atZone(EST.get())) +
                            "\n")
                .collect(joining("\n"));

共有1个答案

宰父德馨
2023-03-14

我想你只需要一个抽象类型的字符串还是一个抽象类型的字符串?对不起,如果我错了。。。我不能评论,所以我张贴类似的答案。

 类似资料:
  • 我正在用Java构建一个库管理应用程序。 我有一个名为 的抽象类。它有一个称为 的抽象方法。 有一个名为< code>Newspaper的子类,它当然实现了< code>equals,其签名与< code>equals在< code>Material中的签名完全相同: Java无法解析< code > elementoacomparer 的任何方法。它们都存在于< code >报纸中,该报纸确实扩

  • 问题内容: 我收到一个错误,程序中有这个结构 错误指向Circle扩展Shapes < T >类,其中指出“ T无法解析为类型”。如果将T设置为字符串,错误将消失,但这也意味着我只能使用一种数据类型。我应该在<>中放入什么,以便可以使用任何数据类型(字符串,整数,双精度型等),或者这样做是错误的? 问题答案: 有两个不同的概念。当你写 这意味着您正在创建一个类,该类在实例化时将被某个类参数化。您不

  • 问题内容: 我之前了解到抽象类可以扩展具体类。尽管我没从JAVA设计师那里看到原因,但是没关系。我还了解到,扩展具体类的抽象类可以使重写的方法抽象。为什么?您可以提供有用的用例吗?我正在尝试学习设计模式,我不想错过任何东西。 这是示例: 问题答案: 如果我有一组想要默认实现的类(以便它们可以从扩展),并且想要强制提供自己的实现(在这种情况下使其抽象为子类会强制执行此操作。) 当然,此示例中的另一种

  • 我在我的一个实用程序类中有一个方法,它接受一个集合和一个类对象,并返回一个Iterable实例,该实例可以遍历作为指定类实例的集合的所有成员。其签名为: 这对于大多数用例都非常有效,但现在我需要将其与泛型类

  • 在java中,是否可以使用通配符定义抽象方法,但在实现中使用具体类型 eg: 在这样的抽象类中定义抽象方法 实现如下抽象方法,其中CorporateServer扩展了用户:

  • 问题内容: 我有一个像这样的课程: 但是编译器说:。 我如何获得的课程? 问题答案: 绝对有可能将其提取出来,因为它不是在运行时定义的,而是在编译时由定义的。 这是一个启动示例,您可以如何在抽象类的构造函数中提取所需的泛型超类型,同时考虑子类的层次结构(以及在无需显式提供类型的情况下将其应用于泛型方法的实际用例)):