当前位置: 首页 > news >正文

花桥网站制作中山网站推广

花桥网站制作,中山网站推广,云主机 网站 多个二级域名 seo优化,服务器是干什么用的java8 默认方法什么是默认方法 在Java 8发行版中#xff0c;您可以修改接口以添加新方法#xff0c;以便该接口与实现该接口的类保持兼容。 万一您开发了一个库#xff0c;该库将由基辅到纽约的几位程序员使用#xff0c;那么这非常重要。 在Java 8出现之前#xff0c;如果… java8 默认方法 什么是默认方法 在Java 8发行版中您可以修改接口以添加新方法以便该接口与实现该接口的类保持兼容。 万一您开发了一个库该库将由基辅到纽约的几位程序员使用那么这非常重要。 在Java 8出现之前如果您在库中发布了接口则您不能添加新方法而不必冒险在接口中实现的某些应用程序会随接口的新版本而中断。 使用Java 8这种恐惧消失了吗 没有。 向接口添加默认方法可能会使某些类无法使用。 首先让我们看一下默认方法的要点。 在Java 8中可以在接口中实现一种方法。 从Java8开始静态方法也可以在接口中实现但这是另一回事。在接口中实现的方法称为默认方法用关键字default表示为修饰符。 当类实现接口时它可以但不必实现已经在接口中实现的方法。 该类继承默认实现。 这就是为什么在实现接口的更改时可能无需触摸类的原因。 多重继承 当一个具体的类实现多个例如两个接口并且这些接口实现相同的默认方法时事情就变得复杂起来。 该类将继承哪个默认方法 答案是否定的。 在这种情况下该类必须自己实现该方法直接实现或通过继承更高级别的类。 当只有一个接口实现默认方法而另一个仅将其声明为抽象方法时也是如此。 Java 8试图受到约束并避免“隐式”的事情。 如果在多个接口中声明了这些方法则不会继承任何默认实现则将出现编译时错误。 但是如果您已经编译了类则不会出现编译时错误。 这样Java 8不一致。 它有其原因我不想在这里详述或出于各种原因而进入辩论例如发布已结束辩论时间很长并且从未在此平台上使用。 假设您有两个接口还有一个实现这两个接口的类。 接口之一实现默认方法m() 。 您编译所有接口和类。 您更改不包含方法m()的接口以将其声明为抽象方法。 仅编译修改后的接口。 运行课程。 在这种情况下该类将运行。 您不能使用修改后的接口再次对其进行编译但是如果它是使用较旧版本进行编译的它仍然可以运行。 现在 修改具有抽象方法m()的接口并创建默认实现。 编译修改后的接口。 运行类失败。 当有两个接口为同一方法提供默认实现时该方法不能在实现类中调用除非由该类实现再次直接或从另一个类继承。 该类是兼容的。 可以使用新界面加载它。 只要两个接口中都没有默认实现的方法的调用它甚至可以开始执行。 样例代码 为了演示上述内容我为类C.java创建了一个测试目录并为文件I1.java和I2.java的接口创建了三个子目录。 测试的根目录在文件C.java包含类C的源代码。 目录base包含适合执行和编译的接口版本。 I1包含具有默认实现的方法m() 。 接口I2目前不包含任何方法。 该类包含一个main方法因此我们可以在测试中执行它。 它测试是否有任何命令行参数因此我们可以轻松地执行它而无需调用方法m() 。 ~/github/test$ cat C.java public class C implements I1, I2 {public static void main(String[] args) {C c new C();if( args.length 0 ){c.m();}} } ~/github/test$ cat base/I1.java public interface I1 {default void m(){System.out.println(hello interface 1);} } ~/github/test$ cat base/I2.java public interface I2 { } 我们可以使用命令行来编译和运行该类 ~/github/test$ javac -cp .:base C.java ~/github/test$ java -cp .:base C hello interface 1 compatible目录包含声明了方法m()抽象的接口I2版本并且由于技术原因它包含未I1.java 。 ~/github/test$ cat compatible/I2.java public interface I2 {void m(); } 这不能用于编译类C ~/github/test$ javac -cp .:compatible C.java C.java:1: error: C is not abstract and does not override abstract method m() in I2 public class C implements I1, I2 {^ 1 error 该错误信息非常准确。 即使我们具有先前编译中的C.class 并且即使在compatible目录中编译接口我们仍将有两个接口可用于运行该类 ~/github/test$ javac compatible/I*.java ~/github/test$ java -cp .:compatible C hello interface 1 wrong的第三个目录包含I2版本该版本还定义了方法m() ~/github/test$ cat wrong/I2.java public interface I2 {default void m(){System.out.println(hello interface 2);} } 我们甚至不应该去编译它。 即使该方法是双重定义的只要不调用该方法该类仍然可以执行但是只要我们尝试调用方法m() 它就会失败。 这就是我们使用命令行参数的目的 ~/github/test$ javac wrong/*.java ~/github/test$ java -cp .:wrong C Exception in thread main java.lang.IncompatibleClassChangeError: Conflicting default methods: I1.m I2.mat C.m(C.java)at C.main(C.java:5) ~/github/test$ java -cp .:wrong C x ~/github/test$结论 当您开始将库移至Java 8并修改接口以添加默认实现时您可能不会遇到问题。 至少这是Java 8库开发人员希望将功能方法添加到集合中的方式。 使用您的库的应用程序仍然依赖没有默认方法的Java 7库。 使用和修改不同的库时冲突的可能性很小。 怎么避免呢 像以前一样设计您的库API。 不要轻易依赖默认方法的可能性。 他们是不得已的选择。 明智地选择名称以避免与其他接口冲突。 我们将学习如何使用此功能来开发Java编程。 翻译自: https://www.javacodegeeks.com/2014/04/java-8-default-methods-what-can-and-can-not-do.htmljava8 默认方法
http://www.yutouwan.com/news/270301/

相关文章:

  • 做网站的公司有前途吗看电视剧的免费网站app下载
  • jsp网站开发公司我的世界做壁纸的网站
  • 空间网站认证wordpress媒体库远程上传
  • 济宁网站建设制作设计开发商虚假宣传是否构成欺诈
  • 英文版网站建站要求长沙h5建站
  • 做暧动漫视频在线观看网站做网站的app有什么作用
  • 皮革材料做网站做卫浴软管的网站
  • 自己怎么做淘宝客网站吗做类似于58同城的网站
  • 哪里需要人做钓鱼网站网站技术报务费如何做会计分录
  • 闸北区网站建设网页设计济南广告公司
  • 南京制作网站优化wordpress 最受欢迎文章
  • 如何在网站做404页面去视频网站做编辑器
  • 网站建设中的服务器搭建方式建筑网格布
  • 网站开发技术人员怎样设置网站关键词
  • 网站加载进度条作风建设年 网站
  • htm5网站ai效果图网站
  • 深圳微信网站设计东莞网站建设流程图
  • xyz域名的网站有哪些苏州网站建设招聘
  • 网站维护 上海软件平台制作
  • ks2e做网站做网站阿里云买哪个服务器好点
  • 温州建设小学 网站首页博客网站入口
  • 旅游示范校建设专题网站wordpress是什么平台
  • 我英文网站建设开网店怎么开的
  • 做网站能用本地的数据库嘛视频网站管理系统
  • 杂志社网站建设方案广告公司管理系统软件
  • 淮安市建设银行网站360网站推广官网硅钙钾镁肥
  • 常用博客建站程序广西网站建设价格多少
  • 企业网站栏目设计网站制作系统哪个好
  • 海外自建站服务器维护中是什么意思
  • 广州网站建设电话销售方案