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

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

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

基本要求:

public abstract class BaseRequest {

private final T details;

public BaseRequest(T details) {

this.details = details;

}

public abstract void process();

}

然后,我有一个处理一些传入数据的请求,可以说这是针对LoginDetails是bean的登录请求:

public class LoginRequest extends BaseRequest {

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 extends BaseRequest {

private final T details;

public BaseDataRequest(T details) {

this.details = details;

}

}

然后登录:

public class LoginRequest extends BaseDataRequest {

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确实包含the Void class.

The Void class is an uninstantiable placeholder class to hold a reference to the Class object representing the Java keyword void.

您可以将类型参数设为Void,以便在对超类构造函数的调用中只能传递null.

public class LogoutRequest extends BaseRequest {

public LogoutRequest() {

super(null);

}

}

标签:java

来源: https://codeday.me/bug/20191028/1953345.html

java 泛型 参数传递子类_超类的Java泛型,但并非所有子类都想定义类型参数相关推荐

  1. java 创建子类_怎么建立java子类

    建立java子类的方法:首先调用父类中的构造函数进行初始化:然后在父类初始化完毕后,对子类的属性进行显示初始化:最后进行子类构造函数的特定初始化. 建立子类过程:Java在构造函数中,第一行会先调用父 ...

  2. java虚拟机编译顺序_深入理解Java虚拟机(程序编译与代码优化)

    文章首发于微信公众号:BaronTalk,欢迎关注! 对于性能和效率的追求一直是程序开发中永恒不变的宗旨,除了我们自己在编码过程中要充分考虑代码的性能和效率,虚拟机在编译阶段也会对代码进行优化.本文就 ...

  3. java继承和引用_浅谈Java继承、传递

    一.继承 1. 继承的概念: 子类继承父类,表明子类是一种特殊的父类,并且具有父类所不具有的一些属性或方法. 2. 继承中的初始化顺序: 从类的结构上而言,其内部可以有如下四种常见形态:属性(包括类属 ...

  4. java获取机器号_(转)JAVA获得机器码的实现

    http://yangshangchuan.iteye.com/blog/2012401 首先,定义了一个统一的接口,以支持不同操作系统不同实现的透明切换: Java代码  收藏代码 /** *生成机 ...

  5. java 鲜为人知的知识点_鲜为人知的Java 8功能:广义目标类型推断

    java 鲜为人知的知识点 遍历Java 8的功能列表 , 广义目标类型推断使我震惊,因为它是一个特别有趣,鲜为人知的瑰宝. 看起来Java语言设计人员将减轻过去使用泛型(Java 5-7)时遇到的某 ...

  6. 新手学java 学哪方面_初学者学Java应从哪些方面学习?

    原标题:初学者学Java应从哪些方面学习? Java作为应用于网络的最好语言,前景无限看好.然而,就算用Java建造一个不是很烦琐的web应用,也不是件轻松的事情.那么,初学者学Java应从哪些方面学 ...

  7. java ee是编程语言_什么是Java编程语言?

    java ee是编程语言 什么是Java? (What is Java?) Java is an Object-Oriented Programming Language. It was first ...

  8. java让线程空转_详解Java编程中对线程的中断处理

    1. 引言 当我们点击某个杀毒软件的取消按钮来停止查杀病毒时,当我们在控制台敲入quit命令以结束某个后台服务时--都需要通过一个线程去取消另一个线程正在执行的任务.Java没有提供一种安全直接的方法 ...

  9. java catch中抛出异常_简单了解Java编程中抛出异常的方法

    任何Java代码都可以抛出异常,如:自己编写的代码.来自Java开发环境包中代码,或者Java运行时系统.无论是谁,都可以通过Java的throw语句抛出异常.从方法中抛出的任何异常都必须使用thro ...

  10. java callable 详解_详解Java Callable接口实现多线程的方式

    在Java 1.5以前,创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口.无论我们以怎样的形式实现多线程,都需要调用Thread类中的start方法去向操作系统请求 ...

最新文章

  1. 百度地图的简单使用 ——html js
  2. 非华为手机可以鸿蒙,【图片】华为鸿蒙系统的厉害之处在于 你可能非用不可 !【手机吧】_百度贴吧...
  3. eclipse连接小米2调试程序的问题
  4. Android之Launcher分析和修改5——HotSeat分析
  5. 实现滚到div时淡入效果
  6. Spring MVC集成测试
  7. hadoop文件操作
  8. OpenLTE 基站相关头文件:用户、定时器、基站接口、消息接口
  9. R语言编程基础(1)
  10. 3.Docker技术入门与实战 --- 使用Docker镜像
  11. python ctp接口_GitHub - keli/ctp-python: 穿透式监管版本CTP接口的Python封装
  12. ANDROID 有关高德地图 导航SDK 组件不见的问题
  13. ASP.NET资源大全
  14. VMware Workstation Pro v15.0.0官方正版
  15. 树莓派运行yolo fastest启用bf16加速
  16. Uber面向中印开发者公布SDK,支持第三方应用集成服务
  17. 【3D建模】Solidworks 3D建模及PrusaSlicer切片打印学习笔记
  18. C++中fstream
  19. 苹果服务器维护时间表2019,ios 内购详解(2019)
  20. 《统计学习方法》学习笔记(一):概论

热门文章

  1. 重装显卡驱动,解决NVIDIA-SMI has failed问题
  2. 关闭445端口即关闭共享文件功能
  3. 配置微信公众号之公众号绑定小程序
  4. python处理nc文件时,遇到不同的产品中经度坐标的排序不一致
  5. 【目标检测】SPP-Net论文理解(超详细版本)
  6. 计算机管理格式化没有顺利完成,tf卡无法格式化的解决方法
  7. 知网查重原理以及降重举例
  8. 【PMP】PMBOK 笔记 第3章 项目管理过程
  9. jstl.jar和standar.jar包下载
  10. 神州数码Vlan功能典型配置