1. /*
  2. * 泛型接口
  3. */
  4. interface Tool<t> {
  5. public void show(T t);
  6.  
  7. //泛型方法
  8. public <e> void print(E e);
  9. }
  10.  
  11. /*
  12. * 这种方式适合实现接口的时候就知道类里的泛型是什么
  13. */
  14. class ToolImpl implements Tool<string> {
  15.  
  16. @Override
  17. public void show(String t) {
  18. System.out.println("show:" + t);
  19. }
  20.  
  21. @Override
  22. public <e> void print(E e) {
  23. System.out.println("print:" + e);
  24. }
  25.  
  26. }
  27.  
  28. /*
  29. * 这种方式不好!
  30. */
  31. class Tool2Impl implements Tool {
  32.  
  33. @Override
  34. public void show(Object t) {
  35. System.out.println("show obj" + t);
  36. }
  37.  
  38. @Override
  39. public void print(Object e) {
  40. System.out.println("show obj" + e);
  41. }
  42.  
  43. }
  44.  
  45. /*
  46. * 这种方式适合使用的时候指定泛型
  47. * 在继承接口的时候不用指定泛型
  48. * 注意的是<t>也可以写成别的比如<c>
  49. * 写成<e>的话,类上的<e>和print方法
  50. * 上的<e>也不是一个类型
  51. */
  52. class Tool3Impl<t> implements Tool<t> {
  53.  
  54. @Override
  55. public void show(T t) {
  56. System.out.println("show=" + t);
  57. }
  58.  
  59. @Override
  60. public <e> void print(E e) {
  61. System.out.println("print=" + e);
  62. }
  63.  
  64. }
  65.  
  66. /*
  67. * 这个写法中show方法和print方法用的泛型也不是一个
  68. * 类上的<e>和print方法上的<e>不是一个类型!!!
  69. */
  70. class Tool4Impl<e> implements Tool<e> {
  71.  
  72. @Override
  73. public void show(E t) {
  74. System.out.println("show-" + t);
  75. }
  76.  
  77. @Override
  78. public <e> void print(E e) {
  79. System.out.println("print-" + e);
  80. }
  81.  
  82. }
  83.  
  84. /*
  85. * 错误!
  86. * class Tool5Impl<string> implements Tool<t> {
  87. *
  88. * }
  89. */
  90. /*
  91. * 正确,但是这个泛型上的String没意义,和Tool3Impl写法没区别
  92. * class Tool5Impl<string, t=""> implements Tool<t> {
  93. *
  94. * }
  95. */
  96. /*
  97. * 错误1
  98. * class Tool5Impl<string|t> implements Tool<e> {
  99. *
  100. * }
  101. */
  102. /*
  103. * 正确,但是这个泛型上的String|T没意义,和Tool4Impl写法没区别
  104. * class Tool6Impl<string|t, e=""> implements Tool<e> {
  105. *
  106. * }
  107. */
  108. public class GenericDemo {
  109.  
  110. public static void main(String[] args) {
  111. ToolImpl ti = new ToolImpl();
  112. ti.show("nihao");
  113. ti.print(6);
  114. Tool3Impl<string> t3i = new Tool3Impl<string>();
  115. t3i.show("haha");
  116. t3i.print(6);
  117. Tool4Impl<string> t4i = new Tool4Impl<string>();
  118. t4i.show("hehe");
  119. t4i.print(6);
  120. }
  121.  
  122. }

  

java 泛型接口示例的更多相关文章

  1. 正则表达式学习笔记(附:Java版示例代码)

    具体学习推荐:正则表达式30分钟入门教程 .         除换行符以外的任意字符\w      word,正常字符,可以当做变量名的,字母.数字.下划线.汉字\s        space,空白符 ...

  2. Java发送邮件示例

    利用Java发送邮件示例: 1.发送QQ邮件 import java.util.Properties; import javax.mail.Message; import javax.mail.Mes ...

  3. Java 泛型示例 - 泛型方法,类,接口

    Java Genrics 是 Java 5 中引入的最重要的功能之一. 如果您一直在使用Java Collections并使用版本 5 或更高版本,那么我确定您已经使用过它. Java 中具有集合类的 ...

  4. HBase Java简单示例

    Hbase采用Java实现,原生客户端也是Java实现,其他语言需要通过thritf接口服务间接访问Hbase的数据. Hbase作为大数据存储数据库,其写能力非常强,加上Hbase本身就脱胎于Had ...

  5. JAVA JPA - 示例用法

    JPA(Java Persistence API)是JSR(Java Specification Requests)的一部分,定义了一系列对象持久化的标准,目前实现这一规范的产品有Hibernate. ...

  6. HBase Java简单示例--转载

    Hbase采用Java实现,原生客户端也是Java实现,其他语言需要通过thritf接口服务间接访问Hbase的数据. Hbase作为大数据存储数据库,其写能力非常强,加上Hbase本身就脱胎于Had ...

  7. JAVA泛型接口

    事例代码: package com.xt.thins_15_3; import java.util.Iterator; /** * 泛型接口 * * @author xue * * @param &l ...

  8. 【转载】Java重构示例【1】

    序言 本文通过Java示例代码片段展示了常用重构原则和技巧,供初级开发人员参考.精致的代码能够清楚传达作者的意图,精致的代码是最好的注释,精致的代码非常容易维护和扩展.程序员阅读精致的代码如同大众欣赏 ...

  9. Java 设计模式 -- 示例指南

    设计模式在软件开发者中非常受欢迎的.每个设计模式都是对常见软件问题的通用的描述解决方案. 我们使用设计模式的好处有: 1.设计模式已经对于一个重复出现的问题进行了定义并且提供了工业标准的解决方案,因为 ...

随机推荐

  1. Head First 设计模式 --9 迭代器模式 组合模式

    迭代器模式:提供一种方法书序访问一个聚合对象中的各个元素,而又不暴露其内部的表示. 用到的设计原则:1.封装变化2.多用组合,少用继承|3.针对接口编程,不针对实现编程4.松耦合5.对扩展开放,对修改 ...

  2. $.getJSON( )的使用方法简介

    JSON(JavaScript Object Notation)即JavaScript对象表示法,是一种轻量级的数据交换格式.它非常便于编程人员对数据的处理,也便于机器对数据的解析和生成,应用非常广泛 ...

  3. NodeJS利用mongoose模糊查询MongoDB

    在Node.js中,直接硬编码可以 Posts.where('title',/答案/); 但是 通过 字符串构造 不行 var qs = '/'+req.query.search+'/'; Posts ...

  4. log4net.NoSql +ElasticSearch 实现日志记录

    前言: 前两天在查找如何扩展log4net的日志格式时找到一个开源项目Log4net.NoSql,它通过扩展Appender实现了把日志输出到ElasticSearch里面.顺藤摸瓜,发现涉及的项目还 ...

  5. GCC选项 –I,-l,-L

    -I:指定第一个寻找头文件的目录 -L:指定第一个寻找库文件的目录 -l:表示在库文件目录中寻找指定的动态库文件 例: gcc –o hello hello.c –I /home/hello/incl ...

  6. PHP数据库页面增删查

    1.用户操作页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...

  7. stopPropagation, preventDefault 和 return false

    e.stopPropagation()此方法用于阻止事件冒泡或者事件捕获.IE8及以下中没有此方法,使用e.cancelBubble=false 来阻止事件冒泡. 当标准W3C中,事件包括捕获阶段和冒 ...

  8. Servlet路径跳转2--在servlet当中,跳转到某网页时的路径写法

    课程1-13   http://www.imooc.com/video/5554 Servlet路径跳转: 绝对路径:放在任何地方都对的路径 相对路径:相对于当前资源的路径 两种方法:请求重定向,服务 ...

  9. IE下只读INPUT键入BACKSPACE 后退问题(readonly='true')

    在IE下,如果在readonly的input里面键入backspace键,会触发history.back(), 用以下jquery代码修正之 $("input[readOnly]" ...

  10. springmvc学习第四天

    数据类型的转换.格式化.校验 1.数据绑定流程 1. Spring MVC 主框架将 ServletRequest 对象及目标方法的入参实例传递给 WebDataBinderFactory 实例,以创 ...