我正在编写一个小型库,我有一些接口提供了一个返回值应该在指定范围内的方法.我如何明确禁止实现此方法的库的用户返回不在此范围内的值?

像这样的东西:

//Library

interface FavoriteNumber {

//returned value must lie between 0 and 10

double whatsYourFavoriteNumberBetweenZeroAndTen();

}

...

//Classes implemented by user of library

class ILikePi implements FavoriteNumber {

@Override

public double whatsYourFavoriteNumberBetweenZeroAndTen() {

return 3.141; //Should be allowed

}

}

...

class AnswerToLifeTheUniverseAndEverything implements FavoriteNumber {

@Override

public double whatsYourFavoriteNumberBetweenZeroAndTen() {

return 42; //Should be forbidden

}

}

我想我可以写点什么

class DoubleBetweenZeroAndTen {

private final double value;

DoubleBetweenZeroAndTen(double value) {

if (value < 0 || value > 10) {

throw new IllegalArgumentException("value must be between 0 and 10");

}

this.value = value;

}

double toDouble() {

return this.value;

}

}

并返回此而不是double,但这感觉不够好,因为它是一个0到10之间的双重,你想要在此之后使用,而不是DoubleBetweenZeroAndTen.

如果不能明确禁止这一点,那么确保用户不会违反它的最佳方法是什么? (现在,我在javadoc中有一个通知.)

最佳答案 您不能明确禁止实现您的接口的人从whatsYourFavoriteNumberBetweenZeroAndTen()方法返回任何double值.

您只能在接口的Javadoc中定义返回值的预期范围,作为接口定义的协定的一部分.假设您的库具有使用该接口的实现的类,如果该方法返回违反您所声明的合同的值,则这些类可能会抛出异常.

这是JDK中的标准做法 – 例如,Comparator的compare()方法的契约定义了所有实现的预期行为,而不遵循契约可能导致使用接口实现的JDK类中的异常或意外结果(例如Collections.sort(List< T> list,Comparator c),如果发现比较器违反了Comparator合同,其Javadoc声明它可能抛出IllegalArgumentException(可选).

JAVA接口返回面积_java – 将接口的返回值限制为实现类的范围相关推荐

  1. java 接口 this参数_Java BiFunction 接口实例

    原标题:Java BiFunction 接口实例 www.baeldung.com/java-bifunction-interface 1. 简介 Java8 引入了函数式编程,可以把函数作为参数传入 ...

  2. java接口源码_java collection接口源码

    package java.util; /* * 1.Collection接口是集合继承关系中的根接口(root interface),有些集合允许重复元素, * 有些集合有序,JDK不提供本接口的实现 ...

  3. java 接口防刷_java轻量级接口限流/防刷插件

    简介 call-limit提供接口限流.防刷的功能,插件基于spring开发,在应用应用的任何一个逻辑层皆可使用(web.service.dao), 插件支持单机应用下的限流和分布式应用的限流(分布式 ...

  4. java8接口写静态方法_Java 8接口更改–静态方法,默认方法

    java8接口写静态方法 Java 8 interface changes include static methods and default methods in interfaces. Prio ...

  5. java返回泛型_Java泛型从泛型方法返回持有者对象

    在下面的: public interface SomeInteface { public B doSomething(A a); } 我想实现一个版本,其中方法doSomething将参数返回回来. ...

  6. java继承求三角形圆形面积_java用接口、多态、继承、类计算三角形和矩形周长及面积的方法...

    本文实例讲述了java用接口.多态.继承.类计算三角形和矩形周长及面积的方法.分享给大家供大家参考.具体如下: 定义接口规范: /** * @author vvv * @date 2013-8-10 ...

  7. java短信接口源码_java免费短信接口开发源码

    java免费短信接口开发源码 更多 作者:捷信通来源:www.jiexintong.cn日期:2014-07-30 17:08:51 微宏捷信通短信接口提供适应C#.Java..NET等多种主流开发语 ...

  8. java类引用接口的注释_java – 在接口类型上使用注释有什么好处?

    在这个 example中,注释类型(@interface)下面: @interface ClassPreamble { String author(); String date(); int curr ...

  9. java 继承和内部类_Java自学-接口与继承 内部类

    Java 内部类 内部类分为四种: 非静态内部类 静态内部类 匿名类 本地类 步骤 1 : 非静态内部类 非静态内部类 BattleScore "战斗成绩" 非静态内部类可以直接 ...

最新文章

  1. hive币涨幅空间大吗_空间大、油耗低,家用MPV领域的三款全能好车,你心动了吗?...
  2. Android应用程序消息处理机制(Looper、Handler)分析(1)
  3. JavaScript正则替换去除字符串中特殊字符
  4. Your shell has not been properly configured to use 'conda activate'
  5. python 线程异步执行踩坑
  6. 作者:周涛,博士,北京启明星辰信息安全技术有限公司教授级高工。
  7. java定义类和测试类时的三种方式
  8. 一个类月光宝盒应用,把手机,电视,盒子变家庭游戏机(FBA,FBNEO,MAME)
  9. 使用 NGINX 搭建 RTMP 流媒体服务器实现直播功能
  10. arcgis 实验教程--ModelBuilder与空间建模
  11. STM32 USART串口发送软件调试
  12. Matlab中的冲激函数
  13. 视频网站主机服务器,视频网站主机服务器
  14. Html5学习------canvas绘制径向渐变图形
  15. IDEA自动导包设置,敲代码直接起飞
  16. 仿pinterest实现瀑布流布局效果
  17. 转子 matlab,转子系统matlab特征值
  18. 量化与码农 | 劝入vs劝退
  19. 摄像头畸变及厂家畸变表分析
  20. FRM-30425: Summarized database item must reside in a block with Query All Records or Precompute Summ

热门文章

  1. 换一种方式编写 Spring MVC 接口
  2. 了解Java中的内存泄漏
  3. android studio 优化提速方法,Android Studio速度慢(如何加速)?
  4. 百度飞浆行人多目标跟踪笔记
  5. OpenCV-Python 雪花飘落特效
  6. c++ 导入caffe
  7. AttributeError: module ‘matplotlib’ has no attribute ‘artist’
  8. linux下安装boost
  9. nvcc fatal : A single input file is required for a non-link phase when an outputfile is specified
  10. Python 动态生成多维数组