假设有三个类:Class1,Class2和Class3加上一个变量值。
我想做的是:
??? value;
switch (someInt) {
case 1: value = new Class1(); break;
case 2: value = new Class2(); break;
case 3: value = new Class3(); break;
}
我希望在JavaFX中使用这个构造来处理各种类似于许多getter和setter的类,但也有一些不同(因此不同的类名都是从同一个父类派生的)。
有没有办法实现上述目标?
我已经评估了一些答案,但我仍然无法找到问题的答案,所以这里有一个具体的例子:
以下是我尝试分配给阴影的三个课程(我知道我不能这样做,仅仅是为了说明):
Shadow shadow;
DropShadow shadow;
InnerShadow shadow;
switch (sType) {
case "SHADOW" : shadow = new Shadow(); break;
case "DROPSHADOW" : shadow = new DropShadow(); break;
case "INNERSHADOW" : shadow = new InnerShadow(); break;
}
// All these classes share the same parameters
shadow.setColor(Color.BLACK);
....
shadow.setRadius(2.0);
fieldContent.setEffect(shadow);
// This will then set any one of the three shadows
答案 0 :(得分:0)
如果Class1
,Class2
和Class3
实现了公共接口,或者扩展了公共基类,则可以使用它。发布后,您可以使用所有Java实例的共同祖先(Object
)。您还需要break
语句,因为case
(s)属性。像,
Object value;
switch (someInt) {
case 1:
value = new Class1();
break;
case 2:
value = new Class2();
break;
case 3:
value = new Class3();
break;
}
答案 1 :(得分:0)
当然可以。默认情况下,Java中的所有类都以Object
为根,因此您可以使用
Object value;
//...
switch (someInt) {
case 1: value = new Class1(); break;
case 2: value = new Class2(); break;
case 3: value = new Class3(); break;
}
或者,如果所有类都实现或扩展了其他功能:
public interface AwesomeClass {
public void method();
}
public class Class1 implements AwesomeClass {
public void method() {
// do class1 thing
}
}
public class Class2 implements AwesomeClass {
public void method() {
// do class2 thing
}
}
// ...
AwesomeClass value;
switch (someInt) {
case 1: value = new Class1(); break;
case 2: value = new Class2(); break;
}
如果类扩展了基类
,这是另一个例子public class Animal {
public void eat() { }
public void walk() { }
}
public class Cat extends Animal {
public void eat() {
// eat like a cat
}
public void walk() {
// walk like a cat (on four legs)
}
public class Horse extends Animal {
public void eat() {
// eat like a horse
}
public void walk() {
// walk like a horse
}
}
Animal myAnimal;
switch(typeOfAnimal) {
case 1: myAnimal = new Cat(); break;
case 2: myAnimal = new Horse(); break;
}