Pet类
Posted xiueer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pet类相关的知识,希望对你有一定的参考价值。
Code1
//: typeinfo/pets/Cat.java
package typeinfo.pets;
public class Cat extends Pet
public Cat(String name) super(name);
public Cat() super();
///:~
Code2
//: typeinfo/pets/Cymric.java
package typeinfo.pets;
public class Cymric extends Manx
public Cymric(String name) super(name);
public Cymric() super();
///:~
Code3
//: typeinfo/pets/Dog.java
package typeinfo.pets;
public class Dog extends Pet
public Dog(String name) super(name);
public Dog() super();
///:~
Code4
//: typeinfo/pets/EgyptianMau.java
package typeinfo.pets;
public class EgyptianMau extends Cat
public EgyptianMau(String name) super(name);
public EgyptianMau() super();
///:~
Code5
//: typeinfo/pets/ForNameCreator.java
package typeinfo.pets;
import java.util.*;
public class ForNameCreator extends PetCreator
private static List<Class<? extends Pet>> types =
new ArrayList<Class<? extends Pet>>();
// Types that you want to be randomly created:
private static String[] typeNames =
"typeinfo.pets.Mutt",
"typeinfo.pets.Pug",
"typeinfo.pets.EgyptianMau",
"typeinfo.pets.Manx",
"typeinfo.pets.Cymric",
"typeinfo.pets.Rat",
"typeinfo.pets.Mouse",
"typeinfo.pets.Hamster"
;
@SuppressWarnings("unchecked")
private static void loader()
try
for(String name : typeNames)
types.add(
(Class<? extends Pet>)Class.forName(name));
catch(ClassNotFoundException e)
throw new RuntimeException(e);
static loader();
public List<Class<? extends Pet>> types() return types;
///:~
Code6
//: typeinfo/pets/Hamster.java
package typeinfo.pets;
public class Hamster extends Rodent
public Hamster(String name) super(name);
public Hamster() super();
///:~
Code7
//: typeinfo/pets/Individual.java
package typeinfo.pets;
public class Individual implements Comparable<Individual>
private static long counter = 0;
private final long id = counter++;
private String name;
public Individual(String name) this.name = name;
// 'name' is optional:
public Individual()
public String toString()
return getClass().getSimpleName() +
(name == null ? "" : " " + name);
public long id() return id;
public boolean equals(Object o)
return o instanceof Individual &&
id == ((Individual)o).id;
public int hashCode()
int result = 17;
if(name != null)
result = 37 * result + name.hashCode();
result = 37 * result + (int)id;
return result;
public int compareTo(Individual arg)
// Compare by class name first:
String first = getClass().getSimpleName();
String argFirst = arg.getClass().getSimpleName();
int firstCompare = first.compareTo(argFirst);
if(firstCompare != 0)
return firstCompare;
if(name != null && arg.name != null)
int secondCompare = name.compareTo(arg.name);
if(secondCompare != 0)
return secondCompare;
return (arg.id < id ? -1 : (arg.id == id ? 0 : 1));
///:~
Code8
//: typeinfo/pets/LiteralPetCreator.java
// Using class literals.
package typeinfo.pets;
import java.util.*;
public class LiteralPetCreator extends PetCreator
// No try block needed.
@SuppressWarnings("unchecked")
public static final List<Class<? extends Pet>> allTypes =
Collections.unmodifiableList(Arrays.asList(
Pet.class, Dog.class, Cat.class, Rodent.class,
Mutt.class, Pug.class, EgyptianMau.class, Manx.class,
Cymric.class, Rat.class, Mouse.class,Hamster.class));
// Types for random creation:
private static final List<Class<? extends Pet>> types =
allTypes.subList(allTypes.indexOf(Mutt.class),
allTypes.size());
public List<Class<? extends Pet>> types()
return types;
public static void main(String[] args)
System.out.println(types);
/* Output:
[class typeinfo.pets.Mutt, class typeinfo.pets.Pug, class typeinfo.pets.EgyptianMau, class typeinfo.pets.Manx, class typeinfo.pets.Cymric, class typeinfo.pets.Rat, class typeinfo.pets.Mouse, class typeinfo.pets.Hamster]
*///:~
Code9
//: typeinfo/pets/Manx.java
package typeinfo.pets;
public class Manx extends Cat
public Manx(String name) super(name);
public Manx() super();
///:~
Code10
//: typeinfo/pets/Mouse.java
package typeinfo.pets;
public class Mouse extends Rodent
public Mouse(String name) super(name);
public Mouse() super();
///:~
Code11
//: typeinfo/pets/Mutt.java
package typeinfo.pets;
public class Mutt extends Dog
public Mutt(String name) super(name);
public Mutt() super();
///:~
Code12
//: typeinfo/pets/Person.java
package typeinfo.pets;
public class Person extends Individual
public Person(String name) super(name);
///:~
Code13
//: typeinfo/pets/Pet.java
package typeinfo.pets;
public class Pet extends Individual
public Pet(String name) super(name);
public Pet() super();
///:~
Code14
//: typeinfo/pets/PetCreator.java
// Creates random sequences of Pets.
package typeinfo.pets;
import java.util.*;
public abstract class PetCreator
private Random rand = new Random(47);
// The List of the different types of Pet to create:
public abstract List<Class<? extends Pet>> types();
public Pet randomPet() // Create one random Pet
int n = rand.nextInt(types().size());
try
return types().get(n).newInstance();
catch(InstantiationException e)
throw new RuntimeException(e);
catch(IllegalAccessException e)
throw new RuntimeException(e);
public Pet[] createArray(int size)
Pet[] result = new Pet[size];
for(int i = 0; i < size; i++)
result[i] = randomPet();
return result;
public ArrayList<Pet> arrayList(int size)
ArrayList<Pet> result = new ArrayList<Pet>();
Collections.addAll(result, createArray(size));
return result;
///:~
Code15
//: typeinfo/pets/Pets.java
// Facade to produce a default PetCreator.
package typeinfo.pets;
import java.util.*;
public class Pets
public static final PetCreator creator =
new LiteralPetCreator();
public static Pet randomPet()
return creator.randomPet();
public static Pet[] createArray(int size)
return creator.createArray(size);
public static ArrayList<Pet> arrayList(int size)
return creator.arrayList(size);
///:~
Code16
//: typeinfo/pets/Pug.java
package typeinfo.pets;
public class Pug extends Dog
public Pug(String name) super(name);
public Pug() super();
///:~
Code17
//: typeinfo/pets/Rat.java
package typeinfo.pets;
public class Rat extends Rodent
public Rat(String name) super(name);
public Rat() super();
///:~
Code18
//: typeinfo/pets/Rodent.java
package typeinfo.pets;
public class Rodent extends Pet
public Rodent(String name) super(name);
public Rodent() super();
///:~
以上是关于Pet类的主要内容,如果未能解决你的问题,请参考以下文章