java 泛型 参数传递子类_超类的Java泛型,但并非所有子类都想定义类型参数
我不知道如何很好地称呼它…我希望灵感会在以后出现,我可以对其进行更新,但是…
让我用一些(伪)代码描述一下:
我试图以一种整洁的方式处理服务器上的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泛型,但并非所有子类都想定义类型参数相关推荐
- java 创建子类_怎么建立java子类
建立java子类的方法:首先调用父类中的构造函数进行初始化:然后在父类初始化完毕后,对子类的属性进行显示初始化:最后进行子类构造函数的特定初始化. 建立子类过程:Java在构造函数中,第一行会先调用父 ...
- java虚拟机编译顺序_深入理解Java虚拟机(程序编译与代码优化)
文章首发于微信公众号:BaronTalk,欢迎关注! 对于性能和效率的追求一直是程序开发中永恒不变的宗旨,除了我们自己在编码过程中要充分考虑代码的性能和效率,虚拟机在编译阶段也会对代码进行优化.本文就 ...
- java继承和引用_浅谈Java继承、传递
一.继承 1. 继承的概念: 子类继承父类,表明子类是一种特殊的父类,并且具有父类所不具有的一些属性或方法. 2. 继承中的初始化顺序: 从类的结构上而言,其内部可以有如下四种常见形态:属性(包括类属 ...
- java获取机器号_(转)JAVA获得机器码的实现
http://yangshangchuan.iteye.com/blog/2012401 首先,定义了一个统一的接口,以支持不同操作系统不同实现的透明切换: Java代码 收藏代码 /** *生成机 ...
- java 鲜为人知的知识点_鲜为人知的Java 8功能:广义目标类型推断
java 鲜为人知的知识点 遍历Java 8的功能列表 , 广义目标类型推断使我震惊,因为它是一个特别有趣,鲜为人知的瑰宝. 看起来Java语言设计人员将减轻过去使用泛型(Java 5-7)时遇到的某 ...
- 新手学java 学哪方面_初学者学Java应从哪些方面学习?
原标题:初学者学Java应从哪些方面学习? Java作为应用于网络的最好语言,前景无限看好.然而,就算用Java建造一个不是很烦琐的web应用,也不是件轻松的事情.那么,初学者学Java应从哪些方面学 ...
- java ee是编程语言_什么是Java编程语言?
java ee是编程语言 什么是Java? (What is Java?) Java is an Object-Oriented Programming Language. It was first ...
- java让线程空转_详解Java编程中对线程的中断处理
1. 引言 当我们点击某个杀毒软件的取消按钮来停止查杀病毒时,当我们在控制台敲入quit命令以结束某个后台服务时--都需要通过一个线程去取消另一个线程正在执行的任务.Java没有提供一种安全直接的方法 ...
- java catch中抛出异常_简单了解Java编程中抛出异常的方法
任何Java代码都可以抛出异常,如:自己编写的代码.来自Java开发环境包中代码,或者Java运行时系统.无论是谁,都可以通过Java的throw语句抛出异常.从方法中抛出的任何异常都必须使用thro ...
- java callable 详解_详解Java Callable接口实现多线程的方式
在Java 1.5以前,创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口.无论我们以怎样的形式实现多线程,都需要调用Thread类中的start方法去向操作系统请求 ...
最新文章
- 百度地图的简单使用 ——html js
- 非华为手机可以鸿蒙,【图片】华为鸿蒙系统的厉害之处在于 你可能非用不可
!【手机吧】_百度贴吧...
- eclipse连接小米2调试程序的问题
- Android之Launcher分析和修改5——HotSeat分析
- 实现滚到div时淡入效果
- Spring MVC集成测试
- hadoop文件操作
- OpenLTE 基站相关头文件:用户、定时器、基站接口、消息接口
- R语言编程基础(1)
- 3.Docker技术入门与实战 --- 使用Docker镜像
- python ctp接口_GitHub - keli/ctp-python: 穿透式监管版本CTP接口的Python封装
- ANDROID 有关高德地图 导航SDK 组件不见的问题
- ASP.NET资源大全
- VMware Workstation Pro v15.0.0官方正版
- 树莓派运行yolo fastest启用bf16加速
- Uber面向中印开发者公布SDK,支持第三方应用集成服务
- 【3D建模】Solidworks 3D建模及PrusaSlicer切片打印学习笔记
- C++中fstream
- 苹果服务器维护时间表2019,ios 内购详解(2019)
- 《统计学习方法》学习笔记(一):概论