超类的Java泛型,但并非所有子类都希望定义类型参数

内洛斯

我不知道如何很好地称呼它...我希望灵感会在以后出现,我可以对其进行更新,但是...

让我用一些(伪)代码描述一下:

我试图以一种整洁的方式处理服务器上的AJAX请求,这就是我想出的。

基本要求:

public abstract class BaseRequest<T> {

    private final T details;

    public BaseRequest(T details) {
        this.details = details;
    }

    public abstract void process();

}

然后,我有一个处理一些传入数据的请求,可以说它是用于登录请求的,其中LoginDetails是一个bean:

public class LoginRequest extends BaseRequest<LoginDetails> {

    public LoginRequest(T details) {
        super(details);
    }

    /**
     * @Override
     */
    public void process() {
        Toolbox.login(this.details);
    }

}

直到现在为止,这种方法都运行良好...我有各种请求,在这些请求中,我将表单数据绑定到bean,并使用Future将它们传递给这些请求。一切都很好...直到...

我决定提出注销请求。该请求不需要将数据绑定到Bean,因此我不希望定义类型参数(很可能会中断)。我想要做的是这样的:

public class LogoutRequest extends BaseRequest {

    public LogoutRequest() {
        super(null);
    }

    /**
     * @Override
     */
    public void process() {
        Toolbox.logout();
    }

}

尽管它确实可以编译和工作,但由于类型安全性,它使我的皮肤爬行。

现在...我知道如何解决这个问题,但我想知道是否有更好的方法。

我的解决方案

将具有一个无类型的基本请求和一个此类型的子类,数据请求子类和注销请求将仅对该无类型的基本请求进行子类化。

未输入的基本要求:

public abstract class BaseRequest {

    public abstract void process();

}

输入的基本数据请求:

public abstract class BaseDataRequest<T> extends BaseRequest {

    private final T details;

    public BaseDataRequest(T details) {
        this.details = details;
    }

}

然后登录:

public class LoginRequest extends BaseDataRequest<LoginDetails> {

    public LoginRequest(T details) {
        super(details);
    }

    /**
     * @Override
     */
    public void process() {
        Toolbox.login(this.details);
    }

}

并注销:

public class LogoutRequest extends BaseRequest {

    /**
     * @Override
     */
    public void process() {
        Toolbox.logout();
    }

}

我只是想确保我的解决方案是最好的选择,并且我没有错过任何指定NULL类型的方法(我知道这个概念不存在)或类似的东西。有人可以帮我确认一下。

另外,我正在提出有关该问题的更新标题的建议。

格特曼

您在考虑某种null类型的方向正确。Java中不存在这样的东西,但是Java确实包含Voidclass

Void类是一个无法实例化的占位符类,用于保存对表示Java关键字void的Class对象的引用。

您可以设置type参数Void,以便只能null在调用中将其传递给超类构造函数。

public class LogoutRequest extends BaseRequest<Void> {

    public LogoutRequest() {
        super(null);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用超类作为泛型子类型中的类型参数

来自分类Dev

如果未指定类型参数,为什么Java泛型原始类会擦除对象的所有泛型?

来自分类Dev

根据Java中的子类类型定义父类方法的泛型类型

来自分类Dev

有什么方法可以在超类中定义泛型方法以引用继承类的类型?

来自分类Dev

Java泛型:定义泛型类时的通配符和类型参数语法

来自分类Dev

泛型方法从超类获取参数类型

来自分类Dev

mixin如何知道泛型超类的类型参数

来自分类Dev

java泛型-如何在知道子类类型和超类的情况下调用子重载方法

来自分类Dev

访问类型是泛型类的子类型?

来自分类Dev

Java扩展具有特定类型的超类的泛型方法

来自分类Dev

如何确定泛型超类的特定子类的ACTUAL返回类型?

来自分类Dev

子类中的Java泛型和有界参数

来自分类Dev

使用类泛型构造的子类型

来自分类Dev

泛型java函数使用的“类型参数”的“类类型”

来自分类Dev

Java泛型类中的超类

来自分类Dev

实现泛型的自定义类的数组不允许自定义类具有子类的泛型

来自分类Dev

具有类参数的泛型类型推断

来自分类Dev

泛型类作为带有内部类型的参数

来自分类Dev

泛型类作为带有内部类型的参数

来自分类Dev

获取抽象超类上泛型类型参数的实际类型

来自分类Dev

解决运行时缺少Java泛型的问题,将超类型绑定到子类实例

来自分类Dev

解决运行时缺少Java泛型的问题,将超类型绑定到子类实例

来自分类Dev

Java泛型-参数化的类与类型化方法

来自分类Dev

Java泛型方法采用类类型的参数

来自分类Dev

Java中的泛型数组,是否将所有类型强制为同一类型?

来自分类Dev

并非所有类型都获取继承类型列表

来自分类Dev

在泛型类型的泛型类上访问类型参数

来自分类Dev

泛型Java通配符和子类型

来自分类Dev

Java泛型-类本身的子类?

Related 相关文章

  1. 1

    使用超类作为泛型子类型中的类型参数

  2. 2

    如果未指定类型参数,为什么Java泛型原始类会擦除对象的所有泛型?

  3. 3

    根据Java中的子类类型定义父类方法的泛型类型

  4. 4

    有什么方法可以在超类中定义泛型方法以引用继承类的类型?

  5. 5

    Java泛型:定义泛型类时的通配符和类型参数语法

  6. 6

    泛型方法从超类获取参数类型

  7. 7

    mixin如何知道泛型超类的类型参数

  8. 8

    java泛型-如何在知道子类类型和超类的情况下调用子重载方法

  9. 9

    访问类型是泛型类的子类型?

  10. 10

    Java扩展具有特定类型的超类的泛型方法

  11. 11

    如何确定泛型超类的特定子类的ACTUAL返回类型?

  12. 12

    子类中的Java泛型和有界参数

  13. 13

    使用类泛型构造的子类型

  14. 14

    泛型java函数使用的“类型参数”的“类类型”

  15. 15

    Java泛型类中的超类

  16. 16

    实现泛型的自定义类的数组不允许自定义类具有子类的泛型

  17. 17

    具有类参数的泛型类型推断

  18. 18

    泛型类作为带有内部类型的参数

  19. 19

    泛型类作为带有内部类型的参数

  20. 20

    获取抽象超类上泛型类型参数的实际类型

  21. 21

    解决运行时缺少Java泛型的问题,将超类型绑定到子类实例

  22. 22

    解决运行时缺少Java泛型的问题,将超类型绑定到子类实例

  23. 23

    Java泛型-参数化的类与类型化方法

  24. 24

    Java泛型方法采用类类型的参数

  25. 25

    Java中的泛型数组,是否将所有类型强制为同一类型?

  26. 26

    并非所有类型都获取继承类型列表

  27. 27

    在泛型类型的泛型类上访问类型参数

  28. 28

    泛型Java通配符和子类型

  29. 29

    Java泛型-类本身的子类?

热门标签

归档