通常的做法是在方法签名中使用args以达到合同的唯一目的

Ant*_*ack 5 java interface

我对我在学校看到的一些代码有点好奇,这是否是这个领域的常见做法或者只是糟糕的设计.

考虑以下接口和实现它的两个类......

public abstract interface Anchor
{
    public abstract double x(double x);

    public abstract double y(double y);
}
Run Code Online (Sandbox Code Playgroud)

请注意,在Cycle类中,实际使用x()和y()中的参数...

public class Cycle implements Anchor
{
    public Anchor anchor;
    public double radius;
    public double period;
    public double phase = 4.0D;

    public Cycle(Anchor anchor, double radius, double period) {
        this.anchor = anchor;
        this.radius = radius;
        this.period = period;
    }

    public double angle(double day) {
        return this.phase * 3.141592653589793D * (day / this.period) / 2.0D;
    }

    public double x(double x) {
        return this.anchor.x(x) + Math.cos(angle(x)) * this.radius;
    }

    public double y(double y) {
        return this.anchor.y(y) + Math.sin(angle(x)) * this.radius;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是在Center类中,x()和y()中的参数仅用于实现与Anchor接口的联系,并且实际上并未在方法中使用...

public class Center implements Anchor
{
    public double x;
    public double y;

    public Center(double x, double y) {
        this.x = x;
        this.y = y;
    }

    public double x(double x) { return this.x; }
    public double y(double y) { return this.y; }
}
Run Code Online (Sandbox Code Playgroud)

这是生产java代码中常见的东西吗?这是一种公认​​的做法还是一项糟糕的工作?

adp*_*mbo 11

是的,这对所有OOP代码都很常见.

接口定义了一组可在实现该接口的任何对象上使用的方法.这些方法的实现是调用者不应该关心的,并且在接口中看到的某些参数不适用于某些实现并不罕见.