Java MyFile扩展了File

时间:2012-07-16 22:11:30

标签: java extends

我是非常非常新的java并尝试扩展File类以使用下面的类添加更多方法和属性

import java.io.File;

public class RecordingFile extends File {
private static final long serialVersionUID = -4774703382591639948L;
String RecordingNameFormatted;
String RecordingDurationFormatted;
String RecordingSizeFormatted;
String RecordingDateFormatted;
String RecordingBitrateFormatted;

public RecordingFile(String path) {
    super(path);
    File f = new File(path);
    RecordingNameFormatted = f.getName().replace(".mp3", "");
    RecordingDurationFormatted = Utils.millisecondsToHours(Utils.getMp3DurationPureJava(f));
    RecordingSizeFormatted = Utils.humanReadableByteCount(f.length(), true);
    RecordingDateFormatted = Utils.longToDate(f.lastModified());
    RecordingBitrateFormatted = Utils.getBitratePureJava(f) +"Kbps";
}
}

以上无效。我甚至不确定是否

    File f = new File(path);

应该在那里。例如,当我尝试这个

ArrayList<RecordingFile> ret = new ArrayList<RecordingFile>();
    RecordingFile filesDir = new RecordingFile(path);
    if (!filesDir.exists()) {
        filesDir.mkdirs();
    }
    RecordingFile[] list = filesDir.listFiles();

Eclipse告诉我“类型不匹配:无法从File []转换为RecordingFile []” 如何通过向其添加更多属性/方法来扩展File类?

3 个答案:

答案 0 :(得分:4)

没有内置的东西知道你的课程,所以他们不可能返回你的新类型。我认为你正在寻找的可能是扩展方法,它们在Java中还不存在。

Java equivalent to C# extension methods

为了使用你的东西,你必须创建一个方法,给定任何File对象的集合,返回你的新类型。然后,您必须在任何想要使用类型的地方调用它。

这条线看起来像

RecordingFile[] list = convertToRecordingFiles(filesDir.listfiles());

我将convertToRecordingFiles的实现留作练习:)

答案 1 :(得分:1)

如果您要延长File,那么您的班级实例也是 File。调用超级构造函数就足够了,然后这将包含所有公共和受保护的字段&amp;文件的方法加上你添加的任何内容。

答案 2 :(得分:1)

问题是当你调用listFiles()时,你正在调用File方法listFiles(),它返回一个File类型的数组。 由于继承,您的RecordingFile类型是IS A文件,但文件不是RecordingFile。因此,当您现在调用listFiles时,没有问题,因为它返回了一个记录文件阵列,其中包含ARE Files,但方法指定它们是文件类型。

如上所述,您可以编写一个将文件转换为RecordingFiles的实用程序方法。

或者,您可以只转换方法调用的结果,因为它返回的File实际上是RecordingFiles。 所以将行改为: RecordingFile [] list =(RecordingFile [])filesDir.listFiles();

在我看来,最干净的选择是重载新类的方法:给RecordingFile一个方法listFiles(),它返回一个RecordingFiles列表(提示:你可以按我上面指定的方式编写方法)。