我一直在试图找出答案,但是我发现在Controller.vehicle上切换时存在问题,因为它是一个浮点值。我尝试将其转换为String,但是它确实起作用,并且将其转换为整数,恐怕会降低精度。
if(Controller.vehicle instanceof Boat) {
file = new File(System.getProperty("user.dir")+"/src/img/boat.png");
}
else if(Controller.vehicle instanceof Ship) {
file = new File(System.getProperty("user.dir")+"/src/img/ship.png");
}
else if(Controller.vehicle instanceof Truck) {
file = new File(System.getProperty("user.dir")+"/src/img/truck.png");
}
else if(Controller.vehicle instanceof Motorcycle) {
file = new File(System.getProperty("user.dir")+"/src/img/motorcycle.png");
}
else if(Controller.vehicle instanceof Bus) {
file = new File(System.getProperty("user.dir")+"/src/img/bus.png");
}
else if(Controller.vehicle instanceof Car) {
file = new File(System.getProperty("user.dir")+"/src/img/car.png");
}
else if(Controller.vehicle instanceof Bicycle) {
file = new File(System.getProperty("user.dir")+"/src/img/bicycle.png");
}
else if(Controller.vehicle instanceof Helicopter) {
file = new File(System.getProperty("user.dir")+"/src/img/helicopter.png");
}
else if(Controller.vehicle instanceof Airplane) {
file = new File(System.getProperty("user.dir")+"/src/img/airplane.png");
}
else if(Controller.vehicle instanceof Tram) {
file = new File(System.getProperty("user.dir")+"/src/img/tram.png");
}
else if(Controller.vehicle instanceof Train) {
file = new File(System.getProperty("user.dir")+"/src/img/train.png");
}
答案 0 :(得分:4)
使用多个instanceof操作通常意味着您的设计不好。
无论车辆类别是什么,它都应具有抽象的getImageFile()方法,并且其每个子类(Ship,Truck等)都应重写该方法以获得正确的图像。因此,您上面的方法将只包含一行:
file = Controller.vehicle.getImageFile();
这将解决其中某些图像文件可能是.jpg,某些可能是.png等问题的可能性。
答案 1 :(得分:0)
在这种情况下,您可以尝试执行以下操作:
file = new File(System.getProperty("user.dir") + "/src/img/" +
Controller.vehicle.getClass().getSimpleName().toLowerCase() + ".png");
答案 2 :(得分:0)
不要上课, 而是让类公开文件名。
某些代码:
public interface ThingWithImage
{
public string getImageFileName();
}
public class Boat implements ThingWithImage
{
@Override
public string getImageFileName()
{
return "boat.png";
}
}
花点功夫, 您还可以使每个类的图像文件名可配置。 例如(使用Spring):
public class Boat implements ThingWithImage
{
@Value("${image.file.name.boat}")
private String boatImageFileName;
@Override
public string getImageFileName()
{
return boatImageFileName;
}
}
答案 3 :(得分:0)
我认为,出于最佳做法,您应该阅读this帖子。 正如Leo和Fred所写的那样,车辆类(可能是抽象或接口)应具有一个名为getName()的函数,并且每次植入均应重写此方法并返回其自己的名称。
abstract class Vehicle{
public abstract String getName();
}
class Airplane extends Vehicle{
public String getName(){ return "airplane";}
}
,您应该这样使用它:
file = new File(System.getProperty("user.dir")+"/src/img/"+Controller.vehicle.getName()+".png");