一道LinkedHashMap<>题目
class Person {
public String name;
@Override
public boolean equals(Object o) {
Person person = (Person) o;
return name.equals(person.name);
}
@Override
public int hashCode() {
return name.length();
}
}
LinkedHashMap<Person, String> personMap = new LinkedHashMap<>();
Person person = new Person();
person.name = "Jack";
personMap.put(person, "Teacher");
person.name = "Tom";
personMap.put(person, "Lawyer");
person.name = "Lily";
personMap.put(person, "Student");
for (Map.Entry<Person, String> entry : personMap.entrySet()) {
Person k = entry.getKey();
String v = entry.getValue();
System.out.printf("%s is a %s\n", k.name, v);
}
}
Lily Lawyer
Lily Student
一道泛型题目
List<Integer> l1 = new ArrayList<>();
List<Long> l2 = new ArrayList<>();
Class<? extends List> l1Class = l1.getClass();
Class<? extends List> l2Class = l2.getClass();
System.out.println(l1.getClass() == l2.getClass());
@Test
public void test(){
List<String> l1 = new ArrayList<>();
ArrayList<Long> l2 = new ArrayList<>();
Class<? extends List> l1Class = l1.getClass();
Class<? extends ArrayList> l2Class = l2.getClass();
System.out.println(l1.getClass() == l2.getClass());
System.out.println(l1Class == l2Class);
}
true true
@Test
public void test(){
List<String> l1 = new ArrayList<>();
List<Long> l2 = new ArrayList<>();
Class<? extends List> l1Class = l1.getClass();
Class<? extends List> l2Class = l2.getClass();
System.out.println(l1.getClass() == l2.getClass());
System.out.println(l1Class == l2Class);
}
true true
@Test
public void test(){
Set<String> l1 = new HashSet<>();
List<Long> l2 = new ArrayList<>();
Class<? extends Set> l1Class = l1.getClass();
Class<? extends List> l2Class = l2.getClass();
System.out.println(l1.getClass() == l2.getClass());
System.out.println(l1Class == l2Class);
}
false false
小结
泛型的 Class类 取决于声明的类,为 Class<? extend 声明的类>
@Test
public void test2(){
AbstractList<String> list1 = null;
List<String> list2 = null;
ArrayList<String> list3 = null;
list1 = list3;
list2 = list3;
List<String> list4 = new ArrayList<>();
}
小结
泛型本类之间只有当泛型是一样的情况下才有继承关系,泛型间构成继承关系的不能用于继承,会出错