This commit is contained in:
罗祥
2019-06-04 10:35:13 +08:00
parent d09ca11daa
commit 52a294dbe6
8 changed files with 75 additions and 77 deletions

View File

@ -60,9 +60,7 @@ object Utils {
### 2.1 类型上界限定
Scala和Java一样对于对象之间进行大小比较要求被比较的对象实现`java.lang.Comparable`接口。
所以如果想对泛型进行比较,需要限定类型上界为`java.lang.Comparable`,语法为` S <: T`,代表类型S是类型T的子类或其本身。示例如下
Scala和Java一样对于对象之间进行大小比较要求被比较的对象实现`java.lang.Comparable`接口。所以如果想对泛型进行比较,需要限定类型上界为`java.lang.Comparable`,语法为` S <: T`代表类型S是类型T的子类或其本身。示例如下
```scala
// 使用 <: 符号限定T必须是Comparable[T]的子类型
@ -126,7 +124,7 @@ trait Ordered[A] extends Any with java.lang.Comparable[A] {
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/scala-richInt.png"/> </div>
要想解决传入数值无法进行比较的问题,可以使用视图界定。语法为`T <% U`,代表T能够通过隐式转换转为U即允许Int型参数在无法进行比较的时候转换为RichInt类型。示例如下
要想解决传入数值无法进行比较的问题,可以使用视图界定。语法为`T <% U`代表T能够通过隐式转换转为U即允许Int型参数在无法进行比较的时候转换为RichInt类型。示例如下
```scala
// 视图界定符号 <%
@ -147,7 +145,7 @@ class Pair[T <% Comparable[T]](val first: T, val second: T) {
### 2.3 类型约束
如果你用的Scala是2.11+,会发现IDEA会提示视图界定已被标识为废弃。官方推荐使用类型约束(type constraint)来实现同样的功能,其本质是使用隐式参数进行隐式转换,示例如下:
如果你用的Scala是2.11+,会发现视图界定已被标识为废弃。官方推荐使用类型约束(type constraint)来实现同样的功能,其本质是使用隐式参数进行隐式转换,示例如下:
```scala
// 1.使用隐式参数隐式转换为Comparable[T]
@ -224,7 +222,7 @@ object ScalaApp extends App {
}
```
Scala针对这个问题提供了ClassTag上下文界定即把泛型的信息存储在ClassTag中这样在运行阶段需要时只需要从中进行获取即可。其语法为`T : ClassTag`,示例如下:
Scala针对这个问题提供了ClassTag上下文界定即把泛型的信息存储在ClassTag中这样在运行阶段需要时只需要从ClassTag中进行获取即可。其语法为`T : ClassTag`,示例如下:
```scala
import scala.reflect._
@ -309,7 +307,7 @@ object ScalaApp extends App {
### 3.1 Comparable
```scala
```java
import java.util.Arrays;
// 实现Comparable接口
public class Person implements Comparable<Person> {
@ -342,7 +340,7 @@ ying:77
### 3.2 Comparator
```scala
```java
import java.util.Arrays;
import java.util.Comparator;
@ -358,7 +356,7 @@ public class Person {
public static void main(String[] args) {
Person[] peoples= {new Person("hei", 66), new Person("bai", 55), new Person("ying", 77)};
// 这里为了直观直接使用匿名内部类,实现Comparator接口
//如果是Java8你也可以写成Arrays.sort(peoples, Comparator.comparingInt(o -> o.age));
//如果是Java8你也可以写成Arrays.sort(peoples, Comparator.comparingInt(o -> o.age));
Arrays.sort(peoples, new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {