`
perfy315
  • 浏览: 412315 次
社区版块
存档分类
最新评论

泛型接口的两种实现方式

阅读更多
在收藏的一篇博客
“java泛型详解”http://lichaozhangobj.iteye.com/blog/476911
上的泛型接口的实现方式,在此再看以代码,进行补充。

泛型接口定义完成之后,就要定义此接口的子类,定义泛型接口的子类有两种方法:

一种是直接在子类后声明泛型
另一种是直接在子类实现的接口中明确地给出泛型类型

一、在子类的定义上声明泛型类型

定义一个接口Info.java
interface Info<T> { //在接口上定义泛型
public T getVar() ; 
}


实现接口的子类DemoImpl.java

class InfoImpl<T> implements Info<T> {   //定义泛型接口的子类
private T var ;
public InfoImpl(T var){
   this.setVar(var) ;
}
public T getVar() {
   return var;
}
public void setVar(T var) {
   this.var = var;
}

}


泛型接口的子类声明了与接口中同样的泛型标识。

主程序GenericsDemo.java

public class GenericsDemo {
public static void main(String args[]){
   Info<Object> i = null;
   i = new InfoImpl<Object>("perfy") ;
   System.out.println("content:" + i.getVar());
}

}


二、直接在接口中指定具体类型

interface Info<T> { //在接口上定义泛型
public T getVar() ; 
}


class InfoImpl implements Info<String> {   //定义泛型接口的子类
private String var ;
public InfoImpl(String var){
   this.setVar(var) ;
}
public String getVar() {
   return var;
}
public void setVar(String var) {
   this.var = var;
}

}

以上程序泛型接口的子类在实现接口时,直接在实现的接口处指定了具体的泛型类型String,这样在覆写Info接口中的getVar()方法时直接指明类型为String即可。


public class GenericsDemo {
public static void main(String args[]){
   Info<String> i = null;
   i = new InfoImpl("perfy") ;
   System.out.println("content:" + i.getVar());
}

}

转:http://hi.baidu.com/foxholeme/blog/item/113f42add775e3c27cd92aa7.html



分享到:
评论

相关推荐

    .NET Core中的一个接口多种实现的依赖注入与动态选择看这篇就够了

    最近有个需求就是一个抽象仓储层接口方法需要SqlServer以及Oracle两种实现方式,为了灵活我在依赖注入的时候把这两种实现都给注入进了依赖注入容器中,但是在服务调用的时候总是获取到最后注入的那个方法的实现,这...

    泛型dao 泛型dao 泛型dao

    3)业务逻辑改变时,dao需要同时修改两个类文件(接口和实现类) 在本文中,我将为您展示如何避免再三地重复 DAO 代码。 在这里我建议项目最好使用一个共通的DAO,因为这样会为你省去非常多的类,而那些类里的...

    Liferay7门户集成Activiti BPM用户组同步

    在实际的BPM集成开发过程中,Liferay和Activiti这两个异构的系统之间,用户、组...其实实现原理非常简单,用户组的同步,就是实现 BaseModelListener 泛型接口 详情见:http://www.cnblogs.com/starcrm/p/6200674.html

    虚拟数据层 Struts2、Hibernate、Spring整合的泛型DAO Version 2010.9.27

    3)业务逻辑改变时,dao需要同时修改两个类文件(接口和实现类) 在本文中,我将为您展示如何避免再三地重复 DAO 代码。 在这里我建议项目最好使用一个共通的DAO,因为这样会为你省去非常多的类,而那些类里的...

    AIC的Java课程1-6章

     通过扩展类和实现接口两种方式定义匿名内部类。 机动时间和复习 2课时 &lt;br&gt; 第8章 异常和断言 4课时  理解异常和错误处理的概念。  学习使用throw,throws检测抛出...

    Android代码-MVPro-简单的AndroidMVP框架,实现MVP模式的新思路

    《一种在android中实现MVP模式的新思路》 和《用MVP架构开发Android应用》两篇文章。 Presenter 在MVPro中,将Activity,Fragment作为Presenter,并且提供了轻量级的ActivityPresenterImpl、FragmentPresenterImpl...

    用C#实现一个Json解析器(5)——语法分析器

    目录前言语法分析器接口基本语法...因为我们要通过多态来实现两种语法分析器的分离,所以提取一个语法分析器接口IParser: interface IParser { T ToObject(string json); object ToObject(System.Type type, stri

    大数据开发成长之路——Java基础(四)

    集合 Java中的集合是用来存放对象的容器 ...List是一种有序链表,本身是一个泛型接口,元素可以重复,可以是 null 包含以下方法: 遍历List // for循环 List list = ...; for (int i=0; i&lt;list.size()

    C++中的多态与虚函数的内部实现方法

    多态分为两种: (1)编译时多态:主要通过函数的重载和模板来实现。 (2)运行时多态:主要通过虚函数来实现。 2、几个相关概念 (1)覆盖、重写(override) override指基类的某个成员函数为虚函数,派生类又定义...

    CLR.via.C#.(中文第3版)(自制详细书签)Part1

    3.1 两种程序集,两种部署 3.2 为程序集分配强名称 3.3 全局程序集缓存 3.4 在生成的程序集中引用一个强命名程序集 3.5 强命名程序集能防范篡改 3.6 延迟签名 3.7 私有部署强命名程序集 3.8 “运行时”如何...

    CLR.via.C#.(中文第3版)(自制详细书签)

    3.1 两种程序集,两种部署 3.2 为程序集分配强名称 3.3 全局程序集缓存 3.4 在生成的程序集中引用一个强命名程序集 3.5 强命名程序集能防范篡改 3.6 延迟签名 3.7 私有部署强命名程序集 3.8 “运行时”如何...

    CLR.via.C#.(中文第3版)(自制详细书签)Part3

    3.1 两种程序集,两种部署 3.2 为程序集分配强名称 3.3 全局程序集缓存 3.4 在生成的程序集中引用一个强命名程序集 3.5 强命名程序集能防范篡改 3.6 延迟签名 3.7 私有部署强命名程序集 3.8 “运行时”如何...

    CLR.via.C#.(中文第3版)(自制详细书签)Part2

    3.1 两种程序集,两种部署 3.2 为程序集分配强名称 3.3 全局程序集缓存 3.4 在生成的程序集中引用一个强命名程序集 3.5 强命名程序集能防范篡改 3.6 延迟签名 3.7 私有部署强命名程序集 3.8 “运行时”如何...

    疯狂JAVA讲义

    8.2.1 定义泛型接口、类 295 8.2.2 从泛型类派生子类 296 8.2.3 并不存在泛型类 298 8.3 类型通配符 298 8.3.1 使用类型通配符 300 8.3.2 设定类型通配符的上限 300 8.3.3 设定类型形参的上限 302 8.4 泛型...

    java-exercise-06-generics-DLiner67:GitHub Classroom创建的java-exercise-06-generics-DLiner67

    通用接口SortedList是实现的基础。 因此, SortedLinkedList必须实现它。 将泛型添加到该类。 SortedLinkedList还应该实现美观的toString()方法。 输出示例可能是: | a | -&gt;| b | -&gt;| g | -&gt;| x | -&gt;| z |目的是要...

    轻松学C#(图解版)

    10.6 显式实现接口 190 10.7 小结 194 10.8 习题 194 第三篇 应用技术篇 第11章 异常处理 200 11.1 异常处理的基础 200 11.1.1 什么是异常 200 11.1.2 未捕获异常的后果 200 11.1.3 常用异常 201 11.1.4 异常处理 ...

    asp.net知识库

    在ASP.Net中两种利用CSS实现多界面的方法 如何在客户端调用服务端代码 页面一postback,它就显示页面的最顶端,怎样让它定位在某一位置? 如何保证页面刷新后的滚动条位置 清除网页历史记录,屏蔽后退按钮! 如何传值...

    java基础案例与开发详解案例源码全

    2.6 Java技术两种核心运行机制29 2.7 上机练习30 第3章 3.1 变量32 3.1.1 什么是变量32 3.1.2 为什么需要变量32 3.1.3 变量的声明和赋值33 3.1.4 变量应用实例33 3.2 数据的分类34 3.2.1 Java中的八种基本数据类型34...

    java开源包3

    Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...

    传智播客扫地僧视频讲义源码

    18_配置文件读写案例_写和修改接口实现 19_文件加密案例_思路分析 20_文件加密案例_文件搬运实现 21_文件加密案例_文件加密功能集成 22_文件加密案例_文件加密实现 23_作业 24_学员二级指针代码bug调试_传智扫地僧 ...

Global site tag (gtag.js) - Google Analytics