实现(扩展)路径

时间:2013-03-19 23:41:01

标签: java extends implements

我正在尝试创建一个能够处理程序中文件管理的对象。

Path接口几乎有我需要的所有方法,但我想添加一些自定义的方法。如果我在我的对象中实现Path,我将必须覆盖所有路径的方法。

有没有办法创建一个具有Path接口的所有方法和一些其他方法的对象,而不实际覆盖接口的方法?

在某种程度上,我想扩展Path接口,但也可以定义任何其他方法体。

3 个答案:

答案 0 :(得分:1)

我可能会警告你关于Path Interface的一些小问题。另外,我有两个实现此接口的建议。

据我所知,Path Interface可以为文件操作符对象中的路径创建一个类型引用点。可以使用Paths Helper Class创建路径(注意-s)。但是,它从未被任何类实现。因此,它是一个用于在公共类型中传递数据的接口。这意味着,编码器应该使用Path Interface作为类型发送信息,然后在声明为接收Path​​ Type Object的其他类操作上使用Path Typed Object。因此,在我看来,实现路径类并不是必需的。

正如我所提到的,我可以向你推荐两件事:虽然,这些类型的做法并不是好的设计决策。 JavaSE7 Doc:here

中也提到了此问题

1)首先,您不必向界面中的所有方法添加行为。您可以使用“未实现”的msg日志声明它们并返回空值。

2)但更好的方法是使用Ali Alamiri提到的抽象类。我个人不会大惊小怪为摘要创建一个子类,只是实现我想要的方法。如果我想为它制作更多容错应用程序,那么使用子类来携带所有未实现的方法,并为所有这些方法使用警告消息日志。

答案 1 :(得分:1)

您可以使用Decorator pattern

请记住例如BufferedReader?这与你的情况非常相似 - 它是一个围绕任何Reader的薄包装器(装饰器),它使得它被缓冲并具有一些额外的方法(可以读取行)。

public class DecoratedPath implements Path {
    private final Path path;

    public DecoratedPath(Path path) {
        this.path = path;
    }

    public DecoratedPath(String stringPath) {
        this(Paths.get(stringPath));
    }

    // add any additional constructors / factory methods you like

    @Override
    public int compareTo(Path other) {
        return path.compareTo(other);
    }

    @Override
    public int endsWith(Path other) {
        return path.endsWith(other);
    }

    // Etc. for all the methods of the Path interface.
    // They'll all delegate to the methods of the path field.
    // You can also enhance some of them, if you want to,
    // to return DecoratedPath instead of Path.

    // your additional methods
}

用法:

DecoratedPath path = new DecoratedPath("/some/path");

答案 2 :(得分:0)

您可以做的是创建一个实现abstract接口的Path类。在这个类中,您可以实现方法或使它们未实现,以便另一个类可以处理它们。然后,您可以扩展此抽象类并覆盖您想要的任何方法,并且您不必覆盖每个方法。

例如:

public abstract class AbstractPath implements Path
{
    //All methods declarations from Path interface
}

public class Base extends AbstractPath
{
   //Override any method declared in AbstractPath
}