
我一看见 Java 8 发布了, 就决定开始深入看看对于这门编程语言新的提高功能. 我否认,自己并没有像看待 7 那样对这个版本进行跟进, 所以我所了解的唯一的提高功能也是lambda表达式而已. 在我读完文档,并写下一些例子程序来保证自己对这种新的特点有一个良好的理解是,有一个特性导致了我非常的切记: 默认方式,首先,让我们来看一看他们到底是什么.
从本质上讲,默认方式就是一个在接口上面有了一个实现的方式. 传统的接口也是简洁的由抽象方法和公共静态的而且是final的变量构成. 那么考虑看看以下这个:
public interface ExampleInterface {
public void exampleMethod();
default public void exampleDefaultMethod() {
// Some implementation code here
}
}
如果一个类决定去实现ExampleInterface, 它只应该去实现exampleMethod, 并且它可以简洁地运用exampleDefaultMethod的默认实现. 现在,让我们来说说Oracle打算让我们如何去使用他们.


这个初衷不是让你在设计时考量使用默认方式成为解决方案,而是他们也是一个事后的考虑. 在Oracle的跟踪报道上她们称述的企图是去“确保为这些老版本接口写的代码的二进制兼容性”(1). 从本质上讲,你和你的研发人员编写了对这些接口的多个实现,但是你想要添加新的一块东西. 然而,这样做就意味着对所有那个实现了这个接口的类进行再次建立都将成功,除非你为他们每一个都补上新增的那一块的实现. 默认方式的看法是你可以在不改变现有实现以及再也不用变更它们的前提下加入对接口的新需求.
但是让我们退后一步想想. 这上面还是有些问题的吧. 首先,让我们接受有时高级别的更改(比如变更你的接口)行将出现的这一事实. 然而,让我们也不要忘了接口的存在的目的是哪个. 理想状况下一个接口锁定一些高级别的对象,或者说你是在成就一些特殊功能部分的API. 如果一些类只应该去推动接口功能 的这些部份java支持多重继承吗,而不是全部的话, 那么那会是一个好的设计吗? 那不就是抽象类被设计起来的理由么?


LeoXu
翻译于 2014/03/24 08:14
1
其次,这会采用针对处理多重继承的意愿. 而如今谢天谢地,如果你有两个拥有一个对于单个方法签名的默认实现的接口, 而你尝试去拥有一个同时推动这两个接口的类, Java将拒绝编译这个类. 许抱怨接口中容许公共静态变量的不确定性,说即使两个接口中有同一个变量都会有些模棱两可(因此像C# 这样的编程语言就会允许诸如此类的事情), 而这是有一些无法对抗的.

我看见这个功能是怎样在这个难题上起作用的, 而我不打算在这里阐述它,直到我看见它被应用在实践中,但是我应该注重它使我感觉兴奋. 话虽这么说java支持多重继承吗,让我们而是来更多的说说这个功能可能会被利用到的地方,而不是它的这个目的.

LeoXu
翻译于 2014/03/24 08:25

1
前面我们提到引入多重继承后模棱两可的弊端, 那么编译器不会捕捉到的会是什么情况呢? 什么才能使我停止像我使用一个抽象类(通常是一些具象方法和一些实现)那样,简单的使用接口的做法,而去利用继承多个接口的用处呢?这没有怎么不好,但是究其自身而言,它必将引导使用Java努力减少的复杂设计. 有些情况是在你实际还要多继承来解决你在建立一个抽象类的框架中使用单个继承类型所不能解决的难题.
总的来说,Java8还是提供了许多很酷的新东西的, 有些看起来同Java早期的基础知识相悖. 不管是好是坏,时间会证明一切. 如果你有任何建议,请自由的分享你们. 此外,任何时候开始在你的项目中使用Java 8,请自由分享你的失败或恐怖故事. 可以通过ryan.kenney@coveros.com联系我.
1 –

LeoXu
翻译于 2014/03/24 08:45
1
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/sanxing/article-124082-1.html
美舰这次很听话
10月电影院包起