- 浏览: 418882 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (244)
- struts2 (15)
- ognl (1)
- hibernate (17)
- gwt (17)
- GROOVY (2)
- GRAILS学习 (7)
- SPRING (4)
- AJAX (2)
- JQUERY (6)
- XML (1)
- DWR (3)
- 线程 (0)
- SVN (0)
- json (1)
- anotation (0)
- 反射 (2)
- rapidframework (0)
- OA工作流 (2)
- 事务 (0)
- mysql (0)
- oracle (26)
- EXTJ (0)
- 求职 (2)
- 随笔 (22)
- 注释 (1)
- java综合 (30)
- 设计模式 (1)
- JSP SERVLET (2)
- 插件 (7)
- 应用 (3)
- HTML (5)
- flex (13)
- android (8)
- javascript (14)
- Exception (0)
- Linux (2)
- 计算机常识 (3)
- EXCEL (2)
- 正则表达式 (1)
- 开源工具 (2)
- 测试 (1)
- 生活 (7)
- 房子 (0)
- 购房大学 (4)
- UML (1)
- 服务器 (1)
- 发展 (1)
- 英语 (1)
- 项目管理 (1)
- 摘 (1)
- 网站 (1)
最新评论
-
a347911:
架构师教程:https://note.youdao.com/s ...
架构师之路--- 一个四年 JAVA 程序员的工作经历 转 -
hzxlb910:
对我帮助很大。
架构师之路--- 一个四年 JAVA 程序员的工作经历 转 -
xly_971223:
引用因此,while (!isInterrupted())也可 ...
Java 终止线程方法 -
zdglt88:
其实这个datagrid挺简单的,没有难度
Jquery easy ui 之datagrid简介 -
完善自我:
抓住重点,支持一下!
Jquery easy ui 之datagrid简介
标识接口就是空方法的接口,与其他接口的区别是:这个接口里面什么方法都没有,只是标记而已。例如serilizeabled就是这样一个接口,他只是告诉jvm,继承于这个接口的CLASS需要序列化处理,而我们根本不用实现这个接口的方法
标识接口是没有任何方法和属性的接口。标识接口不对实现它的类有任何语义上的要求,它仅仅表明实现它的类属于一个特定的类型。
标接口在Java语言中有一些很著名的应用,比如java.io.Serializable和java.rmi.Remote等接口便是标识接口。标识接口,当一个类实现了一个标识接口之后就像是给自己打了个标签。
打个比喻,不是很恰当。就像是一个人穿了件名牌衣服(实现了标识接口),别人一看他穿的衣服(标识接口)就知道他的品味、身份(特性)。
下面是一个示例:
这是昨天我跟天意在一次闲聊中一次有起的讨论,标签接口真有那么重要吗?比如说很多初学者认为java.io.Serializable这样的接口,很多时候可用可不用,不用一样能执行对象系列化功能。
为此,我们通过一个通俗而有趣的示例!这个示例是设计一个猎人,其持有一把智能猎*,这就是说这把猎*会自动识别人类,若发现瞄准的目标是人类,就不会开火,而其它的任何事物都通杀。
为此,我们使用了下面三个接口:
一个用来表示万事万物的SomeThing
public interface SomeThing {}
人类的接口:
public interface Humans extends SomeThing {}
动物的接口:
public interface Animals extends SomeThing {}
然后是一系列的实现:
中国人:
public class Chinese implements Humans {}
日本人:
public class Japanese {}
狗:
public class Dog implements Animals {}
妖怪(他很聪明,给自己帖上了人的标签):
public class Monster implements Humans {}
下面这个程序的核心部分,猎人类及客户端程序:
public class Hunter {
public void fire(Object target)
{
if(target instanceof Humans)
{
System.out.println("这下完了,打中了一个人,该去坐牢了!");
}
else
{
System.out.println("恭喜你,打中了一只动物!");
}
}
//智能的枪
public void intelligentFire(Object target)
{
if(target instanceof Humans)
{
return;
}
System.out.println("开了一枪!"+target.getClass());
//下面进行秒杀等相关处理
//销毁他
target=null;
}
public static void main(String[] args) {
Hunter hunter=new Hunter();
Object[] objects=new Object[]{new Dog(),new Japanese(),new Japanese(),new Chinese(),new Monster(),new SomeThing(){}};
for(int i=0;i<objects.length;i++)
hunter.intelligentFire(objects[i]);
}
}
运行程序,你会发现输出类似下面结果:
开了一枪!class springroad.demo.taginterface.Dog
开了一枪!class springroad.demo.taginterface.Japanese
开了一枪!class springroad.demo.taginterface.Japanese
开了一枪!class springroad.demo.taginterface.Hunter$1
由此可见,智能猎*瞄准6个目标,开了4枪。只对Chinese、及Monster的实例没有开枪。因为这里讨论的是标签接口,虽然Humans没有任何方法,但从智能猎*的角度来看,他就是通过这个标签来判断是否可以开火的。他不用管也管不了目标的层次等级关系(比如Japanese肯定很非常鲜明等级结构),即继承关系。他也管不了目标的来自于哪儿。比如,是用new操作符创建,还是从容器中取,或者是从网络某个地方加载一个。
Hunter只是制订了一个简单的规则,你要想不让我的*对你开火,你就必须在自己身上帖上一个Humans的标签。也就是说你必须遵守这个规则。
现在回过头来看,因为妖怪Monster真身应该是一条蛇或其它什么动物,但是他懂得Hunter制订的规则,于在巧妙的给自己帖上了一个Humans的标签,以致于欺骗了我们的智能猎*。
而Japanese则自认为自己了不起,不按规则办事,我就不理你Hunter制订的规则,什么Humans标签,我就是不用。于是放到我们的程序中当然就只有挨杀的份了。
由此可见,空接口(标签接口)的重要性,在像本例中,给不给自己帖上标签,这是一个性命莜关的问题。其实在OO的世界中,空接口可以算是最高的层像。
标识接口是没有任何方法和属性的接口。标识接口不对实现它的类有任何语义上的要求,它仅仅表明实现它的类属于一个特定的类型。
标接口在Java语言中有一些很著名的应用,比如java.io.Serializable和java.rmi.Remote等接口便是标识接口。标识接口,当一个类实现了一个标识接口之后就像是给自己打了个标签。
打个比喻,不是很恰当。就像是一个人穿了件名牌衣服(实现了标识接口),别人一看他穿的衣服(标识接口)就知道他的品味、身份(特性)。
下面是一个示例:
这是昨天我跟天意在一次闲聊中一次有起的讨论,标签接口真有那么重要吗?比如说很多初学者认为java.io.Serializable这样的接口,很多时候可用可不用,不用一样能执行对象系列化功能。
为此,我们通过一个通俗而有趣的示例!这个示例是设计一个猎人,其持有一把智能猎*,这就是说这把猎*会自动识别人类,若发现瞄准的目标是人类,就不会开火,而其它的任何事物都通杀。
为此,我们使用了下面三个接口:
一个用来表示万事万物的SomeThing
public interface SomeThing {}
人类的接口:
public interface Humans extends SomeThing {}
动物的接口:
public interface Animals extends SomeThing {}
然后是一系列的实现:
中国人:
public class Chinese implements Humans {}
日本人:
public class Japanese {}
狗:
public class Dog implements Animals {}
妖怪(他很聪明,给自己帖上了人的标签):
public class Monster implements Humans {}
下面这个程序的核心部分,猎人类及客户端程序:
public class Hunter {
public void fire(Object target)
{
if(target instanceof Humans)
{
System.out.println("这下完了,打中了一个人,该去坐牢了!");
}
else
{
System.out.println("恭喜你,打中了一只动物!");
}
}
//智能的枪
public void intelligentFire(Object target)
{
if(target instanceof Humans)
{
return;
}
System.out.println("开了一枪!"+target.getClass());
//下面进行秒杀等相关处理
//销毁他
target=null;
}
public static void main(String[] args) {
Hunter hunter=new Hunter();
Object[] objects=new Object[]{new Dog(),new Japanese(),new Japanese(),new Chinese(),new Monster(),new SomeThing(){}};
for(int i=0;i<objects.length;i++)
hunter.intelligentFire(objects[i]);
}
}
运行程序,你会发现输出类似下面结果:
开了一枪!class springroad.demo.taginterface.Dog
开了一枪!class springroad.demo.taginterface.Japanese
开了一枪!class springroad.demo.taginterface.Japanese
开了一枪!class springroad.demo.taginterface.Hunter$1
由此可见,智能猎*瞄准6个目标,开了4枪。只对Chinese、及Monster的实例没有开枪。因为这里讨论的是标签接口,虽然Humans没有任何方法,但从智能猎*的角度来看,他就是通过这个标签来判断是否可以开火的。他不用管也管不了目标的层次等级关系(比如Japanese肯定很非常鲜明等级结构),即继承关系。他也管不了目标的来自于哪儿。比如,是用new操作符创建,还是从容器中取,或者是从网络某个地方加载一个。
Hunter只是制订了一个简单的规则,你要想不让我的*对你开火,你就必须在自己身上帖上一个Humans的标签。也就是说你必须遵守这个规则。
现在回过头来看,因为妖怪Monster真身应该是一条蛇或其它什么动物,但是他懂得Hunter制订的规则,于在巧妙的给自己帖上了一个Humans的标签,以致于欺骗了我们的智能猎*。
而Japanese则自认为自己了不起,不按规则办事,我就不理你Hunter制订的规则,什么Humans标签,我就是不用。于是放到我们的程序中当然就只有挨杀的份了。
由此可见,空接口(标签接口)的重要性,在像本例中,给不给自己帖上标签,这是一个性命莜关的问题。其实在OO的世界中,空接口可以算是最高的层像。
发表评论
-
使用String.replaceAll()
2012-05-15 20:41 1120因为'+'号是正则表达式中特殊字符,所以需要用'\'来进行转义 ... -
Java内存溢出的详细解决方案
2012-02-17 17:11 1581http://java.e800.com.cn/article ... -
内存溢出的分析
2012-02-17 14:14 1269内存溢出是指应用系统 ... -
Java 终止线程方法
2012-02-17 12:58 24670终止线程的三种方法 有三种方法可以使终止线程。 ... -
JAVA的Random类(转)
2012-01-30 10:22 811http://www.cnblogs.com/Fskjb/ar ... -
BigDecimal比较大小
2011-11-30 12:20 1767这个类是java里精确计算的类,下面说一下两个BigDe ... -
正反斜杠的区别
2011-10-27 10:56 30812011-03-01 14:50:29| 分类: lunc ... -
List isEmpty()和size()==0 有什么区别
2011-10-18 19:47 1691没有区别,isEmpty()方法也是判断size是否为0. ... -
java读取properties文件
2011-10-08 17:19 881InputStream inputStream ... -
java中final类 跟final方法
2011-10-08 09:20 1161final方法 将方法声明为final那有 ... -
修改集合列表指定位置元素
2011-09-22 12:31 857set(int index, E element) ... -
date.getMonth()方法的替代
2011-06-24 10:28 1506int m = Calendar.getInstance(). ... -
数组创建----Array constants can only be used in initializers
2011-04-14 09:06 6152前一种为动态初始化,后一种为静态初始化,简单说一下区别: ①静 ... -
List、Set、数组之间的转换
2011-04-11 08:50 1051★ 数组转Collection 使用Apache Jakar ... -
jsp page-taglib.jar使用
2011-04-08 12:55 16072009-06-30 13:58 1: 我们需要下载page标 ... -
tomcat虚拟路径的配置
2011-02-12 16:42 1992在tomcat安装好后,只要 ... -
我还在想象着我的18岁,可我却马上30岁了
2011-01-28 14:34 793我还在想象着我的18岁 ... -
流行开源数据库hsql
2010-12-21 13:11 1017前言:该文章只是简单介绍一下hsql的入门内容,如果想仔细了解 ... -
JS 去除左右空格
2010-12-15 11:06 895//去除左右空格 String.prototype.trim ... -
break 与 continue
2010-08-03 16:55 8902. break 与 continue 加标签用法 在Java ...
相关推荐
* 描述:接口的简要描述,用于解释接口的用途和作用。 * 标签:接口的关键词,用于标识接口的类型和用途。 * 请求参数:接口的请求参数,包括参数名、参数类型、是否必填、说明等信息。 * 返回参数:接口的返回参数...
接口文档在软件开发中起着至关重要的作用,它定义了不同系统或组件之间的通信规则,确保数据能够准确、高效地传递。以下是一个详尽的接口文档模板及其关键知识点的解析: 1. **接口文档的基本结构** - **接口名称*...
【接口设计说明(IDD)】是软件开发过程中关键的文档之一,主要用来详细描述系统、子系统、...通过详细的接口设计,开发人员可以理解系统组件间如何相互作用,从而减少潜在的错误和冲突,提高软件的整体质量和可靠性。
本教程主要介绍了如何使用Python的Flask框架进行API接口的开发,包括其作用、基本步骤以及项目目录结构的规划。 一、开发接口的作用: 1. Mock接口:在某些接口尚未开发完成的情况下,可以通过编写模拟接口返回期望...
* 接口名称:一个独特的名称,用于标识接口。 * 接口描述:对接口的简要描述,用于解释接口的作用和使用方法。 * 接口格式:接口的格式,包括输入参数和返回值。 * 参数说明:对输入参数的解释,包括参数名称、参数...
通过这些知识点,我们可以理解PCIe M.2接口规范对于设计和开发与M.2技术相关的计算机硬件产品的重要性,以及它在确保硬件兼容性和提升性能方面的作用。随着技术的进步,这些规范也可能会随着新版本的发布而更新,...
X2接口是服务口,通常标识为黄色图标,这个接口主要用作与电脑的通讯连接。通过使用ABB的RobotStudio软件,用户可以进行离线编程,将程序上传至或下载自控制柜,大大提升了工作效率和调试的灵活性。 X3接口是示教器...
首先,接口作为类的标识,允许类实现多个接口,这在Java中被称为多重继承。由于Java不支持类的多继承,因此接口成为了实现多继承的一种方式。通过实现不同的接口,一个类可以具有多种不同的行为特征,这使得我们可以...
1. **接口概述**:这部分会简述接口的主要目的和作用,以及它在系统中的位置和重要性。 2. **接口定义**:详细列出接口的名称、版本、接口ID等信息,便于管理和追踪。 3. **接口输入与输出**:明确指出接口接受的...
这些接口对于提高设备的集成度、缩小设备尺寸、降低功耗和提高数据传输速度等方面具有重要作用。 PCI-SIG组织对本规范文档中使用信息的任何错误或误差不承担责任,并且不保证更新文档中的信息。欲了解最新版本的...
路由器的子接口可以充当网关的作用,每个子接口对应交换机的一个Vlan。通过路由器内部子接口之间的第三层包的相互转发,实现Vlan之间的第三层互通。 二、路由器的子接口介绍 所谓子接口,就是在一个物理接口上配置...
无论是在企业内部通知、客户互动还是业务流程自动化中,这些接口都能发挥重要作用。对于熟悉相关接口和协议的开发者来说,可以轻松地将短信服务整合到他们的应用程序中,提升用户体验和工作效率。
- **API接口文档作用**:API(Application Programming Interface)接口文档用于描述应用程序接口的具体实现细节,包括接口的功能、请求方法、请求参数、返回值等,是开发者之间沟通的重要工具。 #### 二、文档结构...
在软件开发过程中,接口文档是不可或缺的一部分,尤其是在Java开发中,它起到了沟通开发者与使用者、团队内部协作的重要作用。一个良好的接口说明文档模板能够确保所有相关人员对接口的理解一致,提高开发效率并减少...
这个接口在日常运营中具有重要的作用,例如处理退款、对账、订单状态跟踪等场景。下面我们将详细探讨这个接口的功能、使用方法以及相关知识点。 一、接口功能 1. **交易查询**:通过接口,可以查询到指定交易的当前...
- **接口的作用**: - 实现数据的输入输出操作。 - 控制设备状态。 - 提供必要的电源和时钟信号。 - **接口类型**: - **定时/计数接口**: 用于时间测量和定时控制。 - **中断接口**: 支持异步事件处理,提高系统...
3. **接口设计原则**:良好的接口设计应遵循一些原则,如最小化接口、一致性、无副作用、灵活性和可扩展性等。 4. **Java接口**:在Java中,接口是一种完全抽象的类型,只包含常量和抽象方法。Java 8引入了默认方法...
"网络接口汇总"这个主题涵盖了各种类型的接口,包括硬件接口和软件接口,它们在互联网和局域网通信中起着至关重要的作用。以下是关于网络接口的一些详细知识点: 1. **物理接口**:这些是计算机硬件上的接口,例如...
- 功能描述:该接口的主要作用是接收来自外部系统的待办流程信息,并将其整合到统一待办中心。 3. **参数说明**: - `syscode`:标识发送待办信息的异构系统。 - `flowid`:流程实例的唯一ID。 - `requestname...