Java学习Day12 泛型简单学习
从传统方法到现代服
传统方法
public class ACompare {
public static void main(String[] args) {
ArrayList arrayList = new ArrayList();
arrayList.add(new Dog("hot",10));
arrayList.add(new Dog("mae",10));
arrayList.add(new Dog("sot",10));
arrayList.add(new Cat("eec",2));
for (Object o :arrayList) {
Dog dog = (Dog) o;
System.out.println(dog.getName()+" "+dog.getAge());
}
}
}
class Dog{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Dog(String name, int age) {
this.name = name;
this.age = age;
}
}
class Cat{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Cat(String name, int age) {
this.name = name;
this.age = age;
}
}
泛型
import java.util.ArrayList;
public class GenericNewDemo_Improve {
public static void main(String[] args) {
ArrayList<Dog> arrayList = new ArrayList<>();
arrayList.add(new Dog("hot",10));
arrayList.add(new Dog("mae",10));
arrayList.add(new Dog("sot",10));
for (Dog dog :arrayList) {
System.out.println(dog.getName()+" "+dog.getAge());
}
}
}
泛型的作用
public class GenericExplanation {
public static void main(String[] args) {
Person<String> person =new Person<String>("yuhuw");
person.show();
Person<Integer> integerPerson = new Person<>(100);
integerPerson.show();
}
}
class Person<E>{
E name;
public Person(E name) {
this.name = name;
}
public E f(){
return name;
}
public void show(){
System.out.println(name.getClass());
}
}
泛型细节
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
public class GenericDetail {
public static void main(String[] args) {
List<Integer> integers = new ArrayList<>();
ArrayList<A> as = new ArrayList<>();
Pig<A> aPig = new Pig<A>(new A());
aPig.f();
Pig<A> aPig2 = new Pig<A>(new B());
aPig2.f();
ArrayList<Integer> integers1 = new ArrayList<Integer>();
ArrayList<Integer> integers2 = new ArrayList<>();
ArrayList arrayList = new ArrayList();
}
}
class Tiger<E>{
E e;
public Tiger(E e) {
this.e = e;
}
}
class A{
}
class B extends A{}
class Pig<E>{
E e;
public Pig(E e) {
this.e = e;
}
public void f(){
System.out.println(e.getClass());
}
}
Homework
import java.util.ArrayList;
import java.util.Comparator;
public class Homework01 {
@SuppressWarnings({"all"})
public static void main(String[] args) {
ArrayList<Emp> emps = new ArrayList<>();
Emp emp1 = new Emp("alice",60000.56,new MyDate(2005,12,5));
Emp emp2 = new Emp("lucy",80000.56,new MyDate(1999,2,23));
Emp emp3 = new Emp("baby",90000.56,new MyDate(1999,8,15));
emps.add(emp1);
emps.add(emp2);
emps.add(emp3);
System.out.println(emps);
emps.sort(new Comparator<Emp>() {
@Override
public int compare(Emp o1, Emp o2) {
if (!(emp1 instanceof Emp && emp2 instanceof Emp)) {
System.out.println("类型不匹配");
return 0;
}
if ((o1.getName()).length()-(o2.getName()).length() != 0){
return (o1.getName()).length()-(o2.getName()).length();
}
return o1.getBirthday().compareTo(emp2.getBirthday());
}
});
System.out.println(emps);
}
}
class Emp{
private String name;
private double sal;
private MyDate birthday;
public Emp(String name, double sal, MyDate birthday) {
this.name = name;
this.sal = sal;
this.birthday = birthday;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSal() {
return sal;
}
public void setSal(double sal) {
this.sal = sal;
}
public MyDate getBirthday() {
return birthday;
}
public void setBirthday(MyDate birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "\nEmp{" +
"name='" + name + '\'' +
", sal=" + sal +
", birthday=" + birthday +
'}';
}
}
class MyDate implements Comparable<MyDate>{
private int year;
private int month;
private int day;
public MyDate(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
public int getDay() {
return day;
}
public void setDay(int day) {
this.day = day;
}
@Override
public String toString() {
return "MyDate{" +
"year=" + year +
", month=" + month +
", day=" + day +
'}';
}
@Override
public int compareTo(MyDate o) {
int yearMin = year - o.getYear();
if (yearMin != 0) {
return yearMin;
}
int monthMin = month - o.getMonth();
if (monthMin != 0) {
return monthMin;
}
return day - o.getDay();
}
}