课时99:泛型方法

简介: 泛型方法是将泛型标记写在方法上,使其能够处理多种数据类型。即使类未定义泛型,也可以使用泛型方法。例如,`IMessage<T>`接口和`MessageImpl<S>`类展示了泛型方法的使用。代码示例中,`JavaDemo`类通过泛型方法`fun(T... args)`返回泛型数组,并在`main`方法中调用该方法,传递整数参数。此外,工厂设计模式结合泛型可以简化接口和实现类的创建过程,减少重复代码,提高开发效率。

课时99:泛型方法

1.1泛型方法的基础介绍


在之前的程序类里面实际上已经可以发现在泛型类之中如果将泛型标记写在了方法上,那么这样的方法就被称为泛型方法,但是需要注意的是,泛型方法不一定非要出现在泛型类之中。即:如果一个类上没有定义泛型,那么也可以使用泛型方法。

interface IMessage<T>{
public string echo(T t);
}
class MessageImpl<S>implements IMessage<S>{
public string echo(s t){return"【ECHO】"+t ;
}
}
public class JavaDemo{
public static void main(string args[]){
IMessage<String>msg =new MessageImpl<String>();
System.out.println(msg.echo("www.mldn.cn"));
}
}
比如我们现在看一个程序位,JavaDemo在此处没有泛型
public class JavaDemo
public static void main(String args[ ]){
现在用泛型方法了解此处返回和泛型数组
public static T[]fun(T···args) {
return args;
T描述的是一个数据位型
JavaDemo..java:5:错误:找不到符号
public static fun(T...args){
此处T没有数据位型,是一个泛型标记
此处应当如下,对T做展现与描述
public static <T> T[]fun(▣··args){
return args;

现在如下:

public class JavaDemo
public static void main(String args[ ]){
Integer num [] = fun (1,2,3); //传入了整数,泛型类型就是Integer
for (int temp num){
System.out.print(temp +“、”)

过程中自动拆墙处理 ,接下来代码编译,再一次执行

D:mldnjava>javac JavaDemo.java
注:JavaDemo.java使用了未经检查或不安全的操作。
注:有关详细信息,请使用-Xlint:unchecked重新编译。
D:\mldnjava>java JavaDemo
1、2、3、
D:\mldnjava

image.png

综上所述:在后期进行项目开发的时候,这种泛型方法很常见。

以之前的工厂设计为例

传统工厂设计

image.png

第一个叫做Imessage,而后有一个叫做Messageimpl操作词汇,这是第一个接口


第二个接口叫Channel,而后一个叫做是Database Channel里有了一个接口,一个子位,后面可能包含有更多资源,用它做代表,按照传统的方式用工厂设计,传统代码设计过程之中,为了获得Message接口对象,在代码中要准备一个Message Factory而后客户端要求能够这样的结构来进行处理,这是工厂设计的结构,按照同样的风格,后续也要Factory的程序位,如果按照这样的结构来进行开发,项目之中一定很混乱。


工厂设计模式本质是好的,它作为解耦合的工厂,设计模式拥有意义,但从另外一个角度而言,整个代码之中,如果此时一个项目有上千个接口,到时候满眼望去都是绝望的身影。


增加接口就要写个工程的,总的来看工程的功能都一样,当然也可以写在一个上位里也可以写在一个工厂,那么在一个工厂怎么做如下所示。


image.png

首先写Factory,而后Factory后面对应有接口,一个接口要对应叫做两个接口,而后继续分析,每一个接口又要对应它对应的无数个子位,现在的叫做是整体的处理结构。这就会出现一个设计的问题


对应叫做接口的访问,一个子位结束之后,这个地方也要有一个接口的访问,此处流程完成。此处完成之后,关键在后面的程序代码工厂所有的都是子位支持,都支持的时候工厂位中应有个方法,比如说第一个方法叫Get message Instance():IMessage,第二个方法叫做Get Channel Instance():IChannel

image.png

这两种方法对应有不同的操作,整个程序看出只有一个工程位,但是这一个工厂位的背后会带来多种情况当上千个工厂装这个接口的时候,就算有一个工厂位,同样重复的方法可能存在有上千个

image.png

传统工厂在设计开发过程之中功能相同,但是过于重复,需要通过一个程序的方式去解决,如下。

利用代码这是一种折中方案,利用泛型改进工厂

Interface IMessage{
public void send(String str);
}
class MessageImpl implements IMessage{
public void send(String str){
System.out.println("消息发送:"+str);
}
}
class Factory{
public static <T>T getInstance(String className,T t){
if ("messageImpl".equalsIgnorecase(className)){
return new MessageImpl( );
}
return null;
}
}
public class JavaDemo{
public static void main(String args[]){
IMessage msg = (IMessage) Factory.getInstance ("messageImpl" IMessage.class);
msg.send("www.mldn.cn");

写至此处编译,检查是否能够通过。

image.png

相关文章
|
6月前
|
Java 开发者
课时98:泛型接口
本文聚焦Java泛型接口,阐述泛型不仅能在位(类)上定义,还可在接口中使用。通过实际代码示例,详细介绍泛型接口的定义以及子类实现泛型接口的两种方式,帮助读者理解其概念和应用,强调在实际编程中理解和掌握这些知识的重要性。 1.泛型接口的定义 2.泛型接口的子类实现方式
142 2
|
6月前
|
弹性计算 运维 监控
【阿里云】操作系统控制台——体验与测评
### 操作系统控制台简介 操作系统控制台是阿里云提供的一款强大管理工具,支持通过API、SDK、CLI等方式进行运维管理。其可视化页面便于用户高效分析问题,降低使用复杂度,并替代专业人员提供指导意见。该控制台适用于中国内地和香港地区,需确保RAM用户具备相应权限并安装SysOM组件。它不仅提供了主机健康监控、系统诊断、进程热点追踪等功能,还帮助用户优化系统性能,确保业务稳定运行。 (239字)
|
6月前
|
Oracle Java 关系型数据库
课时48:JavaDoc文档简述
主要讲解了Java DOC文档的使用方法和技巧。首先,介绍了Java DOC的简介,强调了在开发过程中需要大量使用API文档。其次,详细解析了Java DOC的组成结构,包括位的完整定义、类的相关说明以及方法的详细解释。 1.Java DOC简介 2.Java DOC文档的组成
153 20
|
6月前
|
Java
课时18:Java运算符(逻辑运算符)
课时18介绍了Java中的逻辑运算符(与、或、非)。通过范例详细讲解了非操作的使用,展示了如何正确应用逻辑非(!)。接着分别探讨了与操作(& 和 &&)及或操作(| 和 ||),强调了短路运算符(&& 和 ||)在性能和安全性上的优势。课程通过具体代码示例演示了不同逻辑运算符的效果及其应用场景。
166 5
|
6月前
|
Java 程序员 数据处理
课时19:Java运算符(位运算符)
课时19介绍Java中的位运算符,涵盖进制转换、位与、位或及移位操作。重点讲解了二进制与其他进制的转换方法,通过具体范例演示了位与和位或运算的过程,并展示了八进制和十六进制的处理方式。此外,还解释了逻辑运算符(&&、||)与位运算符(&、|)的区别及其应用场景,特别是位运算在加密中的应用。
119 5
|
6月前
|
Java C++
课时124:assert断言
assert断言的含义以及使用 1.断言的引入 2.生活实例理解断言 3.Java 中断言的使用
147 2
|
6月前
|
Java
课时10:Java数据类型划分(整型类型)
本文主要围绕Java中整型数据展开,详细讲解整型变量、常量的概念,整型数据运算规则,包括数据溢出问题及解决方法,数据类型转换(自动转换与强制转换)的原理和注意事项,同时介绍了整型数据默认值的相关知识,以及byte数据类型与int数据类型的关系和使用场景,帮助读者全面掌握Java整型数据的相关内容。
181 4
|
6月前
|
Java
课时103:生成jar文件
本文介绍了Java中生成和使用JAR文件的基本概念与操作。JAR文件用于将多个类文件打包成一个压缩文件,便于管理和分发。通过JDK提供的`jar`命令可以创建JAR文件,并可通过设置CLASSPATH环境变量来配置和使用这些文件。文中还演示了如何定义、编译和打包一个简单的Java程序为JAR文件,并详细解释了JAR文件的结构及配置方法。此外,简要提及了JDK 1.9后引入的模块化系统对JAR文件的影响。
173 1
|
6月前
|
设计模式 Java uml
课时107:时序图
课时107介绍了时序图的描述与设计。时序图用于展示代码执行流程,如Java程序中接口IMessage、类MessageImpl及Factory的调用顺序。通过Power Designer创建UML Sequence Diagram,定义类操作结构并绘制消息传递路径,清晰呈现工厂模式下对象实例化和方法调用的过程。时序图帮助理解程序逻辑,适用于项目开发中的流程分析与文档记录。
192 1
|
6月前
|
测试技术
课时108:用例图
课时108介绍了用例图的设计与描述。用例图用于展示系统中不同角色的功能分配,如系统管理员拥有系统初始化、备份、公告发布等功能,而普通管理员仅负责公告管理。通过建立Use Cases图,可以直观呈现各角色的具体功能,帮助在项目设计阶段明确角色权限和职责。用例图是详细设计和概要设计的重要组成部分,有助于清晰表达系统的功能结构。
160 1