创建可以包含任何类型的一个变量的 Java Class
Creating Java Class that can contain one variable of any type
我正在制作一个场景 class,我想要一个 尚未定义 变量类型。
class Scene {
int fps = 60;
float duration;
// one instance of any variable type (another class)
}
有时我希望使用 :
构建场景
class Scene {
int fps = 60;
float duration;
Simulation1 simulation;
}
其他时候我希望使用
构建场景
class Scene {
int fps = 60;
float duration;
Simulation2 simulation;
}
Simulation1 和 Simulation2 都是两个非常不同的自定义 classes 但它们有一些共同的函数名称。例如,它们都有名为 init()、deleteRandomParticles() 等的函数。这意味着在我的主要代码中我可以调用 :
scene.simulation.init();
scene.simulation.deleteRandomParticles();
我觉得这很实用,但我找不到让场景 class 这样工作的方法。
完整解决方案:
class Scene<T extends SceneInterface> {
T simulation;
Scene(T simulation) {
this.simulation = simulation;
}
}
interface SceneInterface {
public void init();
public void deleteRandomParticles();
}
并确保在你的模拟中有这个 classes :
class Simulation1 implements SceneInterface{
}
选项 1:Object
.
class Scene {
int fps = 60;
float duration;
Object simulation;
}
选项 2:Simulation1
和 Simulation2
都实现的 Simulation
接口。
class Scene {
int fps = 60;
float duration;
ISimulation simulation;
}
选项 3:通用类型 T
class Scene<T> {
int fps = 60;
float duration;
T simulation;
}
您似乎在寻找泛型,它是 angular 括号中的东西,例如 List<String>
。另外,如果你的模拟 类 有共同的方法,我会制作一个模拟接口并让模拟 1 和 2 实现它。您可以像这样使泛型扩展接口:class Scene<T extends Simulation>
然后使用类型 T 就好像它是像 String 这样的变量类型。
我正在制作一个场景 class,我想要一个 尚未定义 变量类型。
class Scene {
int fps = 60;
float duration;
// one instance of any variable type (another class)
}
有时我希望使用 :
构建场景class Scene {
int fps = 60;
float duration;
Simulation1 simulation;
}
其他时候我希望使用
构建场景class Scene {
int fps = 60;
float duration;
Simulation2 simulation;
}
Simulation1 和 Simulation2 都是两个非常不同的自定义 classes 但它们有一些共同的函数名称。例如,它们都有名为 init()、deleteRandomParticles() 等的函数。这意味着在我的主要代码中我可以调用 :
scene.simulation.init();
scene.simulation.deleteRandomParticles();
我觉得这很实用,但我找不到让场景 class 这样工作的方法。
完整解决方案:
class Scene<T extends SceneInterface> {
T simulation;
Scene(T simulation) {
this.simulation = simulation;
}
}
interface SceneInterface {
public void init();
public void deleteRandomParticles();
}
并确保在你的模拟中有这个 classes :
class Simulation1 implements SceneInterface{
}
选项 1:Object
.
class Scene {
int fps = 60;
float duration;
Object simulation;
}
选项 2:Simulation1
和 Simulation2
都实现的 Simulation
接口。
class Scene {
int fps = 60;
float duration;
ISimulation simulation;
}
选项 3:通用类型 T
class Scene<T> {
int fps = 60;
float duration;
T simulation;
}
您似乎在寻找泛型,它是 angular 括号中的东西,例如 List<String>
。另外,如果你的模拟 类 有共同的方法,我会制作一个模拟接口并让模拟 1 和 2 实现它。您可以像这样使泛型扩展接口:class Scene<T extends Simulation>
然后使用类型 T 就好像它是像 String 这样的变量类型。