import java.util.*;
class SetType{
int i;
public SetType(int n){ this.i = n;}
public boolean equals(Object o){
return o instanceof SetType && (this.i == ((SetType)o).i);
}
@Override
public String toString() {
return Integer.toString(i);
}
}
class HashType extends SetType{
public HashType(int n) {super(n);}
public int hashCode(){return i;}
}
class TreeType extends SetType implements Comparable<TreeType>{
public TreeType(int n){super(n);}
public int compareTo(TreeType o){
return (o.i<i?-1: (o.i ==i ?0:1));
}
}
public class TypesForSets {
static <T> Set<T> fill(Set<T> set,Class<T> type)
{
try{
for(int i=0;i<10;i++){
//下面代码什么鬼?
set.add(type.getConstructor(int.class).newInstance(i));
}
}catch(Exception e){
throw new RuntimeException(e);
}
return set;
}
static <T> void test(Set<T> set,Class<T> type ){
fill(set,type);
fill(set,type); //try to add duplicates
fill(set,type);
System.out.println(set);
}
public static void main(String[] args) {
//test(new HashSet<HashType>(),HashType.class);
//test(new LinkedHashSet<HashType>(),HashType.class);
//test(new TreeSet<TreeType>(),TreeType.class);
//Things that don't work:
//test(new HashSet<SetType>(),HashType.class);
Set<String> set = new LinkedHashSet<String>();
set.add("Bob");
set.add("Allen");
set.add("Carb");
System.out.println(set);
}
}