`
leonzhx
  • 浏览: 797074 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Item 37: Use marker interfaces to define types

阅读更多

1.  A marker interface is an interface that contains no method declarations, but merely designates (or “marks”) a class that implements the interface as having some property.

 

2.  Marker interfaces have two advantages over marker annotations. First, marker interfaces define a type that is implemented by instances of the marked class; marker annotations do not. The existence of this type allows you to catch errors at compile time that you couldn’t catch until runtime if you used a marker annotation. Another advantage of marker interfaces over marker annotations is that they can be targeted more precisely. If an annotation type is declared with target ElementType.TYPE, it can be applied to any class or interface. Suppose you have a marker that is applicable only to implementations of a particular interface. If you define it as a marker interface, you can have it extend the sole interface to which it is applicable, guaranteeing that all marked types are also subtypes of the sole interface to which it is applicable.

 

3.  The chief advantage of marker annotations over marker interfaces is that it is possible to add more information to an annotation type after it is already in use, by adding one or more annotation elements with defaults.

 

4.  Another advantage of marker annotations is that they are part of the larger annotation facility. Therefore, marker annotations allow for consistency in frameworks that permit annotation of a variety of program elements.

 

5.  If the marker applies only to classes and interfaces, ask yourself the question, Might I want to write one or more methods that accept only objects that have this marking? If so, you should use a marker interface in preference to an annotation. This will make it possible for you to use the interface as a parameter type for the methods in question, which will result in the very real benefit of compile-time type checking. If you answered no to the first question, ask yourself one more: Do I want to limit the use of this marker to elements of a particular interface, forever? If so, it makes sense to define the marker as a subinterface of that interface. If you answered no to both questions, you should probably use a marker annotation.

 

分享到:
评论

相关推荐

    Effective Java 3rd edition(Effective Java第三版英文原版)附第二版

    Item 41: Use marker interfaces to define types 7 Lambdas and Streams Item 42: Prefer lambdas to anonymous classes Item 43: Prefer method references to lambdas Item 44: Favor the use of standard ...

    大班英语教案:Words marker notebook book-bag.doc

    大班英语教案:Words marker notebook book-bag.doc

    幼儿园教案2021-大班英语教案:Words marker notebook book-bag.doc

    为此,本文将详细介绍一份针对幼儿园大班学生的英语教案,该教案主要目标是教授三个与日常学习生活紧密相关的英文单词:marker(记号笔)、notebook(笔记本)和book-bag(书包)。 教案设计的首要环节是“Warm-up...

    CSS 列表模型之marker标记的使用

    本文主要聚焦于`::marker`伪元素的使用,这是一个非常有用的功能,它允许我们自定义列表项(`list-item`)前的标记。`::marker`伪元素是在CSS3中引入的,用于更精细地控制列表的视觉表示。 `::marker`伪元素是一个...

    百度地图:Marker+定位到当前位置+计算两个坐标的距离+单击marker事件

    百度地图:Marker+定位到当前位置+计算两个坐标的距离+单击marker事件

    百度地图加载海量marker卡顿问题

    在开发基于地图的应用时,尤其是使用百度地图API时,可能会遇到一个常见的问题——当需要在地图上显示大量标记(marker)时,地图加载会变得卡顿,用户体验显著下降。这个问题通常由于JavaScript处理大量DOM元素导致...

    markerarray简单示例代码

    在ROS(Robot Operating System)开发过程中,`marker`是一种常用工具,用于在rviz(ROS的可视化工具)中展示机器人环境、传感器数据或其他3D对象。`markerarray`是`marker`的一种扩展,允许一次性发布多个`marker`...

    百度地图去掉marker覆盖物或者去掉maker的label文字方法

    var marker = new BMap.Marker(...); //方法1 map.removeOverlay(marker); //方法2 marker.remove(); //如果是Marker设置的setLabel还可以设置其样式来隐藏 mapComponent.state.bikeMarkLabel.setStyle({ display:...

    Leaflet.AnimatedMarker:动态marker

    [37, 26], iconAnchor: [19, 13], iconUrl: '../img/car.png'})// 动态markervar animatedMarker = L.animatedMarker(routeLine.getLatLngs(), { icon: carIcon, playCall: updateRealLine}).addTo(map)var ...

    图片处理 javax.imageio.IIOException: Unsupported Image Type

    在Java编程环境中,图片处理是一项常见的任务,但有时可能会遇到“javax.imageio.IIOException: Unsupported Image Type”的错误。这个异常通常表示Java的`ImageIO`类库无法识别或支持所尝试读取或写入的图像格式。...

    android-cluster-marker:android marker聚合效果

    本工程为基于高德地图Android SDK进行封装,实现了Marker聚合效果的例子 前述 . 阅读. 工程基于Android 3D地图SDK实现 功能描述 基于3D地图SDK进行封装,在大量点需要显示的场景下可以对点进行聚合显示,提高地图...

    高德地图Marker平滑移动

    在Android开发中,高德地图API提供了一个强大的功能,即让地图上的Marker实现平滑移动。这个功能在很多场景下非常实用,比如模拟导航、展示动态数据等。本示例项目"Android_Move_Example-master"显然是一个专为演示...

    MotionCapture:基于Marker__的运动捕获系统检测骨骼运动

    《基于Marker的运动捕获系统及其在MATLAB中的实现》 运动捕获(Motion Capture,Mocap)技术是数字娱乐、体育科学、生物力学、医学研究等领域的重要工具,它能够精确地记录人体或物体的动态行为。在Mocap系统中,...

    高德地图将marker用连线连起来

    标题"高德地图将marker用连线连起来"所指的就是如何在高德地图API中实现这样的功能,即连接具有自定义图片的marker。这一操作在地理信息系统(GIS)应用中非常常见,可以用于显示交通路线、旅行轨迹、服务网点分布等。...

    联想所有机型marker

    标题中的“联想所有机型marker”可能是指一个包含联想公司各种型号电脑硬件配置、规格或标识符的集合。在IT行业中,"marker"这个词在这种上下文中可能是标记、指示器或者特征的意思,用来区分不同型号的联想产品。这...

    联想笔记本电脑 Marker 文件

    不用重新刷主板BIOS,在纯DOS下直接运行MARKER,即可刷进slci2.1,激活Windows7系统。 警告:本Marker针对联想笔记本电脑,选择对应的型号刷写,包括十几种型号,不要选错了。

    ARtoolskit marker制作工具

    在ARToolKit系统中,marker是关键元素,它们是带有特定图案的图像,用于识别和跟踪在摄像头视图中的位置。ARToolKit marker制作工具就是专门用来生成这些标记图像的实用程序。 ARToolKit Marker Generator是一个...

    高德地图Marker拖动圆环范围.zip

    高德地图SDK为开发者提供了丰富的功能,包括定位、标注(Marker)以及自定义图形等。本文将深入探讨如何在高德地图中实现Marker拖动以及拖动时显示圆环范围的功能。 首先,我们需要了解高德地图API中的Marker对象。...

    联想SLIC2.1Marker.rar

    联想旭日C430系列机型支持Vista&7系统BIOS及“Marker”文件。 联想昭阳E390&旭日420系列机型支持Vista&7系统BIOS及“Marker”文件。 注意:此附件marker文件适用于伟创(Wistron)所有主板机型,其中包括:昭阳E390/...

    Android高级应用源码-高德地图Marker拖动圆环范围.rar

    该压缩包文件“Android高级应用源码-高德地图Marker拖动圆环范围.rar”包含了一个Android应用示例,这个示例重点展示了如何在高德地图API中实现Marker的拖动以及显示一个可拖动的圆环范围。下面将详细阐述相关知识点...

Global site tag (gtag.js) - Google Analytics