当前位置: 首页 > news >正文

JAVA——泛型类和泛型方法(静态方法泛型)

泛型类定义的泛型,在整个类中有效。如果被方法是用,那么 
泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了。

为了让不同的方法可以操作不同类型,而且类型还不确定。那么 
可以将泛型定义在方法上。

泛型类

class Demo<T>
{
    public void show(T t)
    {
        System.out.println("show: "+t); } public void print(T t) { System.out.println("show: "+t); } }
class GenericDemo4
{
    public static void main(String[] args)
    {
        Demo<Integer>d = new Demo<Integer>(); d.show(new Integer(4)); Demo<String>d1 = new Demo<String>(); d1.print("haha"); } }

 

结果: 
show: 4 
show: haha

泛型方法

class Demo
{
    public <T> void show(T t)
    {
        System.out.println("show: "+t); } public <Q> void print(Q q) { System.out.println("print:"+q); } }

 

class GenericDemo4
{
    public static void main(String[] args)
    {
        Demo d = new Demo(); d.show("hello boy!"); d.print("Alex i love you !"); } }

 

结果: 
show: hello boy! 
print:Alex i love you !

同时定义泛型类和泛型方法

class Demo<T>
{
    public void show(T t)
    {
        System.out.println("show: "+t); } public <Q> void print(Q q) { System.out.println("print:"+q); } } class GenericDemo4 { public static void main(String[] args) { Demo <String> d = new Demo<String>(); d.show("hello boy!"); d.print("Alex i love you !"); d.print(5); d.print("heiei"); } }

 

结果: 
show: hello boy! 
print:Alex i love you ! 
print:5 
print:heiei

特殊之处: 
静态方法不可以访问类上定义的泛型 
如果静态方法操作的应用数据类型不确定,可以将泛型定义在方法上。

class Demo<T>
{
    public void show(T t)
    {
        System.out.println("show: "+t); } public <Q> void print(Q q) { System.out.println("print:"+q); } public static <W>void method(W t) { System.out.println("method: "+t); } } class GenericDemo4 { public static void main(String[] args) { Demo <String> d = new Demo<String>(); d.show("hello boy!"); d.print("Alex i love you !"); d.print(5); d.print("heiei"); Demo.method("hihi"); } }

 

结果: 
show: hello boy! 
print:Alex i love you ! 
print:5 
print:heiei 
method: hihi

泛型定义在接口上

interface Inter<T>
{
    void show(T t); } //第一种 class InterImpl implements Inter<String> { public void show(String t) { System.out.println("show :"+t); } } /*第二种 class InterImpl<T>implements Inter<T> { public void show(T t) { System.out.println("show :"+t); } } */ class GenericDemo5 { public static void main(String[] args) { /* InterImpl<Integer> i = new InterImpl<Integer>(); i.show(4); */ InterImpl i = new InterImpl(); i.show("haha"); } }

 

结果: 
show :haha 
第一种相对来说就比较死,固定为String类型了。而第二种可以自己定义。

相关文章:

  • oracle修改某个表的字段顺序
  • 令牌桶算法限流
  • nginx的ngx_module_s 模块
  • 阿里云RDS-MYSQL数据库参数设置
  • k8s实验环境的快速搭建
  • IBM欲寻找量子杀手级应用
  • jQuery插件 -- Form表单插件jquery.form.js
  • 日志框架 - 基于spring-boot - 实现2 - 消息定义及消息日志打印
  • php命令行生成项目结构
  • P4035 [JSOI2008]球形空间产生器
  • 简述this指向
  • 如何理解angular自定义指令directive的scope属性?
  • zabbix3配置阿里云邮箱告警
  • 小葵花妈妈课堂开课了:《Runnable、Callable、Future、RunnableFuture、FutureTask 源码分析》...
  • 跟我学Shiro电子书
  • Android单元测试 - 几个重要问题
  • C# 免费离线人脸识别 2.0 Demo
  • CSS实用技巧
  • Django 博客开发教程 16 - 统计文章阅读量
  • echarts花样作死的坑
  • ECMAScript入门(七)--Module语法
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • Java 网络编程(2):UDP 的使用
  • JavaScript中的对象个人分享
  • leetcode98. Validate Binary Search Tree
  • Less 日常用法
  • Python_OOP
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • 对超线程几个不同角度的解释
  • 前端临床手札——文件上传
  • 双管齐下,VMware的容器新战略
  • 思考 CSS 架构
  • 小程序测试方案初探
  • 正则学习笔记
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • 函数计算新功能-----支持C#函数
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​2020 年大前端技术趋势解读
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • (4)STL算法之比较
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (三)模仿学习-Action数据的模仿
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET MVC第五章、模型绑定获取表单数据
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .Net(C#)常用转换byte转uint32、byte转float等
  • .NET/C# 的字符串暂存池
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .NET开源项目介绍及资源推荐:数据持久层
  • .net快速开发框架源码分享