版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012447842/article/details/81065807
java 泛型程序设计:
java核心技术书籍第12章
1:泛型定义
minmax设计为static方法:
原因: static静态方法是存储在静态存储区内的,可以通过类.方法名直接进行调用,不需要进行实例化。
package chapter12;
public class PairTest1 {
public static void main(String[] aegs)
{
String[] words = {"Mary", "Java", "Scala", "Hadoop"};
ArrayAlg.Pair<String> mm = ArrayAlg.minmax(words);
System.out.println("min=" + mm.getFirst());
System.out.println("max=" + mm.getSecond());
}
}
class ArrayAlg
{
public static Pair<String> minmax(String[] a)
{
if (a == null || a.length == 0) return null;
String min = a[0];
String max = a[0];
for (int i = 0; i < a.length; i++)
{
if (min.compareTo(a[i]) > 0) min = a[i];
if (max.compareTo(a[i]) < 0) max = a[i];
}
return new Pair<String>(min, max);
}
public static class Pair<T>
{
public Pair(T f, T s)
{
this.first = f;
this.second = s;
}
public T getFirst() {
return this.first;
}
public T getSecond() {
return second;
}
private T first;
private T second;
}
}
输出结果如下:
min=Hadoop
max=Scala
Process finished with exit code 0
2: 通配符
<? extends T>代表类型T的某个子类 <? super T>代表类型T的某个父类
package chapter12;
import java.util.Date;
import java.util.GregorianCalendar;
public class PairTest3 {
public static void main(String[] args)
{
Manager ceo = new Manager("Gus Greedy", 80000, 2018, 12, 12);
Manager cfo = new Manager("Scala", 60000, 2018, 12, 12);
Pair<Manager> buddies = new Pair<Manager>(ceo, cfo);
printBuddies(buddies);
ceo.setBonus(10000);
cfo.setBonus(50000);
Manager[] managers = {ceo, cfo};
Pair<Employee> result = new Pair<Employee>();
minmaxBonus(managers, result);
System.out.println("\tfirst: " + result.getFirst().getName() + ", second: " + result.getSecond().getName());
maxminBonus(managers, result);
System.out.println("\tfirst: " + 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 YUxx.");
}
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 maxminBonus(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 <T> void swapHelper(Pair<T> p){
T t = p.getFirst();
p.setFirst(p.getSecond());
p.setSecond(t);
}
}
class Pair<T>
{
public Pair()
{
}
public Pair(T first, T second)
{
this.first = first;
this.second = second;
}
public T getFirst() { return first;}
public T getSecond() { return second; }
public void setFirst(T newValue) { first = newValue;}
public void setSecond(T newValue) {second = newValue; }
private T first;
private T second;
}
class Employee
{
public Employee(String n, double s, int year, int month, int day)
{
name = n;
salary = s;
GregorianCalendar calendar = new GregorianCalendar(year, month -1, day);
hireDay = calendar.getTime();
}
public String getName()
{
return name;
}
public double getSalary()
{
return salary;
}
public Date getHireDay()
{
return hireDay;
}
public void raiseSalary(double byPercent)
{
double raise = salary * byPercent / 100;
salary += raise;
}
private String name;
private double salary;
private Date hireDay;
}
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 void setBonus(double b)
{
bonus = b;
}
public double getBonus() {
return bonus;
}
private double bonus;
}
输出结果如下
Gus Greedy and Scala are YUxx.
first: Gus Greedy, second: Scala
first: Scala, second: Gus Greedy
Process finished with exit code 0