1. 程式人生 > >JAVA程式設計思想學習總結:第十四章型別資訊

JAVA程式設計思想學習總結:第十四章型別資訊

import java.util.*;
interface Factory<T>{T create();}
class Part{
	public String toString(){
		return getClass().getSimpleName();
	}
	static List<Factory<? extends Part>> partFactories=new ArrayList<Factory<? extends Part>>();
	static{
		//Collections.addAll() gives an "unchecked generic"
		//array creation... for varargs parameter" warning;
		partFactories.add(new FuelFilter.Factory());
		partFactories.add(new AirFilter.Factory());
		partFactories.add(new CabinAirFilter.Factory());
		partFactories.add(new OilFilter.Factory());
		partFactories.add(new FanBelt.Factory());
		partFactories.add(new PowerSteeringBelt.Factory());
		partFactories.add(new GeneratorBelt.Factory());	
	}
	private static Random rand=new Random(47);
	public static Part createRandom(){
		int n= rand.nextInt(partFactories.size());
		return partFactories.get(n).create();
	}
}
class Filter extends Part{}
class FuelFilter extends Filter{
	// Create a Class Factory for each specific type;
	public static class Factory implements typeinfo.Factory<FuelFilter>{
		public FuelFilter create() {return new FuelFilter();}
	}
}
class AirFilter extends Filter{
	public static class Factory implements typeinfo.Factory<AirFilter>{
		public AirFilter create(){return new AirFilter();}
	}
}
class GeneratorBelt extends Belt{
	public static class Factory implements typeinfo.Factory<GeneratorBelt>{
		public GeneratorBelt create(){return new GeneratorBelt();}
	}
}
class PowerSteeringBelt extends Belt{
	public static class Factory implements typeinfo.Factory<PowerSteeringBelt>{
		public PowerSteeringBelt create(){return new PowerSteeringBelt();}
	}
}
class FanBelt extends Belt{
	public static class Factory implements typeinfo.Factory<FanBelt>{
		public FanBelt create(){return new FanBelt();}
	}
}
class Belt extends Part{};
class OilFilter extends Filter{
	public static class Factory implements typeinfo.Factory<OilFilter>{
		public OilFilter create(){return new OilFilter();}
	}
}
class CabinAirFilter extends Filter{
	public static class Factory implements typeinfo.Factory<CabinAirFilter>{
		public CabinAirFilter create(){return new CabinAirFilter();}
	}
}
public class RegisteredFactories {
	public static void main(String[] args){
		for(int i=0;i<10;i++)
			System.out.println(Part.createRandom());
	}
}

(4)反射