-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGenericCompare.java
More file actions
125 lines (95 loc) · 2.58 KB
/
GenericCompare.java
File metadata and controls
125 lines (95 loc) · 2.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
package Chapter12Generic;
import java.awt.Component;
import java.util.Dictionary;
import java.util.GregorianCalendar;
import java.util.Hashtable;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JSlider;
import javax.swing.plaf.SliderUI;
/*
* 通用的找出最大值和最小值的方法
*
* */
public class GenericCompare {
private int X=1;
private int Y=2;
private int Z=3;
public enum size{a,b,c};
//枚举类型---实际这是定义了一个枚举的类
public enum s{
SMALL("s"),MEDIUM("M"),LARGE("L");
private String s;
private s(String size){
this.s=size;
}
}
public static void main(String[] args) {
GregorianCalendar calendar1=new GregorianCalendar(2011, 11, 12);
GregorianCalendar calendar2=new GregorianCalendar(2012, 2, 3);
GregorianCalendar calendar3=new GregorianCalendar(1034, 3, 3);
//实际中,可以省略类型参数,因为系统可以猜测出
Pair<GregorianCalendar> minmax= ArrayCompare.<GregorianCalendar>minmax(calendar1,calendar2,calendar3);
System.out.println("最小值:"+minmax.getFirst().getTime()+" 最大值:"+minmax.getSecond().getTime());
Dictionary<Integer,Component> labelTable=new Hashtable();
labelTable.put(0,new JLabel(new ImageIcon()));
JSlider slide=new JSlider();
slide.setLabelTable(labelTable);
//java不支持泛型类型的数组
//Pair<Object>[] table=new Pair<Object>[10];//ERROR不允许实例化,但是允许声明
}
}
class ArrayCompare{
//变参函数---会把参数变成数组
//extend不是继承,,,表示T是该绑定类型的子类型
//<T extends Comparable>类型参数
/*
* 可变参数如果是泛型类的话,就违反了“Java不能实例化泛型数组的规则”,,这里可以用@SafeVarargs注解消除
* */
@SafeVarargs
public static <T extends Comparable> Pair<T> minmax(T...t){
T min=t[0];
T max=t[0];
for(T value:t){
if(min.compareTo(value)>0){
min=value;
}
if(max.compareTo(value)<0){
max=value;
}
}
return new Pair<>(min,max);
}
}
//定义泛型类 T-----类型参数
class Pair<T>{
private T first;
private T second;
//Cannot make a static reference to the non-static type T
//禁止使用带有类型变量的静态域或静态方法
//private static T a;
public Pair(){
first=null;
second=null;
}
public Pair(T first,T second){
this.first=first;
this.second=second;
}
public T getFirst() {
return first;
}
public void setFirst(T first) {
this.first = first;
}
public T getSecond() {
return second;
}
public void setSecond(T second) {
this.second = second;
}
//命名为equals方法名冲突-------因为擦除类型后和Object.equals()方法冲突
public boolean equal(T value){
return first.equals(value)&&second.equals(value);
}
}