java - 让一个方法接受不同的对象作为参数

标签 java

首先我只放我的示例代码。

public class Shape {

    public String colour;

    public Shape(String colour) {
        this.colour = colour;
    }

}

public class Car {

    public String colour;

    public Car (String colour) {
        this.colour = colour;
    }

}

public class Colour {

    public static String getColour(Object item) {
        return item.**colour**;
    }

}

我已经阅读了与此相关的其他问题,但我似乎无法理解。我发现他们的原始代码对我来说太复杂了。所以我试图制作尽可能简单的代码。无论如何,我希望 getColour 接受 Shape 和 Car 对象。如果我像在示例中那样使用 Object,则粗体的“颜色”被视为错误。我得到的错误是“颜色无法解析或不是一个字段”。怎么了?

还有,我听说过很多“静态方法不好”之类的,这是不好的情况吗?因为我发现如果不将其设为静态,那么我需要在 Shape 和 Car 类中复制 getColour 方法。如果我应该避免静态方法,那么请建议另一种方法来做到这一点。

最佳答案

你要找的是interfaces的概念:

public interface Colourable {
    String getColour();
    void setColour(String colour);
}

您应该修改 ShapeCar 类:

public class Shape implements Colourable {
    public Shape(String colour) {
        this.colour = colour;
    }

    private String colour;

    public String getColour() {
        return colour;
    }

    public void setColour(String colour) {
        this.colour = colour;
    }
}

(请注意,我已将 colour 字段设为私有(private);这是常见做法并称为 encapsulation)

然后您可以将静态方法定义为

public static String getColour(Colourable item) {
    return item.getColour();
}

静态方法绝对不错,虽然在这种情况下方法本身有点多余,因为如果你已经有一个Colourable,你知道你可以调用.getColour() 来获取它的颜色。更有用的方法是

public static boolean isRed(Colourable item) {
    return "red".equals(item.getColour());
}

关于java - 让一个方法接受不同的对象作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31359058/

相关文章:

java - Jackson 自定义序列化程序或值对象?

java - Java连接池关闭

java - 修改Arraylist Java,范围问题

Java-无法让球移动

java - 如何仅当某个字符在匹配中出现 n 次时才匹配?

JavaFX 到 Android (com.android.ide.common.internal.LoggedErrorException)

java.awt.Desktop.open 不适用于 PDF 文件?

Java排序价格值升序和降序

java - 如何使用 Java 通过 Web 服务以 JSON 格式公开数据?

java - 如何在Java中重写方法但仍然使用变量?