package demo;import java.util.Date;
import java.util.GregorianCalendar;public class PairTest3 {
public static void main(String[] args) {
Manager ceo=new Manager("Gus Greendy",800000,2003,12,15);
Manager cfo=new Manager("Sid Sneaky",600000,2003,12,15);
Pair<Manager> buddies=new Pair<Manager>(ceo,cfo);
printBuddies(buddies);

ceo.setBonus(1000000);
cfo.setBonus(500000);
Manager[] managers={ceo,cfo};
Pair<Employee> result=new Pair<Employee>();
minmaxBonus(managers, result);
System.out.println("first:"+result.getFirst().getName()
+",second:"+result.getSecond().getName());
maxminBous(managers, result);
System.out.println("first:"+result.getFirst().getName()
+",second:"+result.getSecond().getName());
}
public static void printBuddies(Pair<? extends Employee> p){
Employee first=p.getFirst();
Employee second=p.getSecond();
System.out.println(first.getName()+" and "
+second.getName()+" are buddies. ");
}
public static void minmaxBonus(Manager[] a,Pair<? super Manager> result){
if(a==null||a.length==0)return;
Manager min=a[0];
Manager max=a[0];
for (int i = 1; i < a.length; i++) {
if(min.getBonus()>a[i].getBonus())min=a[i];
if(max.getBonus()<a[i].getBonus())max=a[i];
}
result.setFirst(min);
result.setSecond(max);
}
public static void maxminBous(Manager[] a,Pair<? super Manager> result){
minmaxBonus(a, result);
PairAlg.swapHelper(result);
}
}
class PairAlg{
public static boolean hasNulls(Pair<?> p){
return p.getFirst()==null||p.getSecond()==null;
}
public static void swap(Pair<?> p)
{
swapHelper(p);
}
public static <T> void swapHelper(Pair<T> p)
{
T t=p.getFirst();
p.setFirst(p.getSecond());
p.setSecond(t);
}
}
class Employee
{
public Employee(String n,double s,int year,int month,int day){
name=n;
salary=s;
GregorianCalendar calender=new GregorianCalendar(year,month-1,day);
hireDay=calender.getTime();
}

private String name;
private double salary;
private Date hireDay;
public Date getHireDay() {
return hireDay;
}
public String getName() {
return name;
}
public double getSalary() {
return salary;
}
public void raiseSalary(double byPercent)
{
double raise=salary*byPercent/100;
salary+=raise;
}
}
class Manager extends Employee
{

    public Manager(String n,double s,int year,int month,int day)
    {
     super(n,s,year,month,day);
     bonus=0;
    }
    public double getSalary(){
     double baseSalary=super.getSalary();
     return baseSalary+bonus;
    }
public double getBonus() {
return bonus;
} public void setBonus(double bonus) {
this.bonus = bonus;
}
private double bonus;
}

解决方案 »

  1.   

    Pair<Manager> buddies=new Pair<Manager>(ceo,cfo); //说明buddies里放的是一对Manager对象
    Pair<Employee> result=new Pair<Employee>(); //说明result里放的是一对Employee对象
    Pair<? super Manager> result //说明该方法的参数result放的是一对Manager的父类的对象
    Pair<?> p //说明参数p放的是任意一种类型的一对对象
    public static <T> void swapHelper(Pair<T> p) //说明p放的是调用方法时指定的一种类型T的一对对象