java核心技术书籍第12章

版权声明:本文为博主原创文章,未经博主允许不得转载。 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


猜你喜欢

转载自blog.csdn.net/u012447842/article/details/81065807