在Java中创建类数组
可以在Java中创建静态类数组吗? 例如:
SceneObject[] scenes = {Loading.class, Menu.class};
// Loading and Menu extend SceneObject
我们需要通过数组调用静态方法,而不是实例化它们
编辑:
以下是我们正在努力实现的目标。我们也可以使用许多开关,但在每个方法中将每个对象添加到每个开关中听起来是多余的
package net.bitworm.gameengine;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import net.bitworm.scenes.*;
public class SceneController {
public enum Scene{
LOADING_SCENE,
MENU,
SCENE_1
}
public static SceneObject[] scenes = {new Loading(), new Menu()};
public volatile static Scene currentScene = Scene.LOADING_SCENE;
public static void setScene(Scene newScene){
currentScene = newScene;
System.out.println("Switched to " + currentScene.toString());
}
public static void update(GameContainer container, int delta){
scenes[currentScene.ordinal()].update(container, delta);
}
public static void render(GameContainer container, Graphics g){
scenes[currentScene.ordinal()].render(container, g);
}
public static void mouseMoved(int oldx, int oldy, int newx, int newy){
scenes[currentScene.ordinal()].mouseMoved(oldx, oldy, newx, newy);
}
public static void mousePressed(int button, int x, int y){
scenes[currentScene.ordinal()].mousePressed(button, x, y);;
}
public static void mouseReleased(int button, int x, int y){
scenes[currentScene.ordinal()].mouseReleased(button, x, y);
}
public static void mouseWheelMoved(int change){
scenes[currentScene.ordinal()].mouseWheelMoved(change);
}
public static void keyPressed(int key, char c){
scenes[currentScene.ordinal()].keyPressed(key, c);
}
public static void keyReleased(int key, char c){
scenes[currentScene.ordinal()].keyReleased(key, c);
}
# 1 楼答案
您需要区分类和对象。例如,您可能有:
或者
你的问题不清楚你的意思,但希望这两种情况都能满足。。。请注意,不能使用泛型数组,因此使用
Class[]
不能指定每个类必须扩展SceneObject
编辑:现在我们有了更多的信息,听起来你有这样的信息:
这里的两个
foo
方法完全不相关——不能使用多态性来调用它们,因为它们是静态方法。如果你想使用多态性——即调用一个知道你想调用哪个签名的方法,但实现取决于调用的目标——你需要实例方法:然后你可以写:
# 2 楼答案
除了创建一个扩展SceneObject的类数组之外,我们还可以为这些对象创建一个容器:
这个答案的好处是指定了多个继承标准,例如:
但是实例化一个额外的对象也有缺点,即容器+包含类的变量,而不仅仅是包含类的变量