scala泛型
1. 泛型例子
object GenericApp {
def main(args: Array[String]): Unit = {
// new weChatMsg("hello")
// new DigitMsg(12)
val mm1 = new MM[Int, CupEnum, Int](90, CupEnum.G, 160)
val mm2 = new MM[Int, CupEnum, Int](80, CupEnum.C, 170)
val mm3 = new MM[Int, CupEnum, Int](70, CupEnum.B, 180)
println(mm1)
println(mm2)
println(mm3)
}
object CupEnum extends Enumeration{
type CupEnum = Value
val A,B,C,D,E,F,G = Value
}
class MM[A,B,C](val faceValue:A, val cup:B, val high:C){
override def toString: String = faceValue + "\t" + cup + "\t" + high
}
abstract class Msg[T](content:T)
class weChatMsg(content:String) extends Msg(content)
class DigitMsg(content:Int) extends Msg(content)
}
2. comparable 比较 使用
实现比较得第一种方式
/**
* 比较
* Comparator: Ordering(scala)
* Compareble: ordered(scala)
*/
public class MM implements Comparable<MM>{
private String name;
private int cup;
public static void main(String[] args) {
MM mm1 = new MM("mm1", 32);
MM mm2 = new MM("mm2", 33);
MM mm3 = new MM("mm3", 34);
List<MM> mms = new ArrayList<>();
mms.add(mm1);
mms.add(mm2);
mms.add(mm3);
// cmp01(mms);
// com02(mms);
}
//方法2 实现了comparable接口得实现
private static void com02(List<MM> mms) {
Collections.sort(mms);
for (MM mm : mms){
System.out.println(mm);
}
}
//方法1 不用实现comparable接口
private static void cmp01(List<MM> mms) {
Collections.sort(mms, new Comparator<MM>() {
@Override
public int compare(MM o1, MM o2) {
return o1.cup - o2.cup;
}
});
for(MM mm : mms){
System.out.println(mm);
}
}
public MM(String name, int cup) {
this.name = name;
this.cup = cup;
}
public MM() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getCup() {
return cup;
}
public void setCup(int cup) {
this.cup = cup;
}
@Override
public String toString() {
return "MM{" +
"name='" + name + '\'' +
", cup=" + cup +
'}';
}
// 实现comparable接口后要实现compareTo方法
@Override
public int compareTo(MM o) {
return -(this.cup - o.cup);
}
}
3. 泛型得表现形式
- Java
表示传入得东西 XXX得子类型 上界 (最多可以传到XXX ,XXX得儿子都可以传)