不知道我有一個抽象類的類的實例:創建在編譯時
public abstract class Room {
}
和繼承的類未在編譯時已知的,如:
public class MagicRoom extends Room {
public MagicRoom(){
System.out.println("Creating a MagicRoom.");
}
public String magic = "";
}
或:
public class Dungeon extends Room {
public Dungeon(){
System.out.println("Creating a Dungeon");
}
public String keeper = "";
}
我有一個類,我會從創建這些類的實例:
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
public class MazeGame {
public static Room makeRoom(Class roomClass)
throws IllegalArgumentException, InstantiationException,
IllegalAccessException, InvocationTargetException,
SecurityException, NoSuchMethodException{
Constructor c = roomClass.getConstructor();
return c.newInstance();
}
}
makeRoom是我嘗試創建一個類,我不知道在編譯時間,但我不知道該怎麼把它作爲它的返回類型而不是Room。由於makeRoom返回房間我得到一個異常,如果我嘗試使用屬於繼承的類中的字段:
import java.lang.reflect.InvocationTargetException;
public class FactoryTest {
public static void main(String[] args)
throws IllegalArgumentException, SecurityException,
InstantiationException, IllegalAccessException,
InvocationTargetException, NoSuchMethodException{
MazeGame game = new MazeGame();
Room magicRoom = MazeGame.makeRoom(MagicRoom.class);
/*
* Exception in thread "main" java.lang.Error: Unresolved compilation problem:
* magic cannot be resolved or is not a field
*/
magicRoom.magic = "a";
}
}
我不明白,這個班被稱爲「MagicRoom」嗎? – 2014-02-07 16:33:04