方法未定义类型。帮我解决一下

时间:2014-02-10 23:41:48

标签: java file methods boolean

我创建了私有布尔方法isMp3(),但是java告诉我这个类型的方法是未定义的。

if (directoryItem.isFile() && directoryItem.isMp3()){
    resultListOfFiles.add(directoryItem);
}

我不想对任何值进行处理。 我想像布尔方法'isDirectory()'一样使用它。我知道,我做错了,请告诉我我的错误。

private boolean isMp3(){
    Pattern pattern;
    final String FILE_PATTERN = "([^\\s]+(\\.(?i)(mp3))$)";
    pattern = Pattern.compile(FILE_PATTERN);
    Matcher matcher = pattern.matcher(this.toString());
    if (matcher.find()){
        return true;
    }
    else{
        return false;
    }
}

如果我正确使用“this”语句?

3 个答案:

答案 0 :(得分:1)

正如@Claus建议的那样,如果你可以传递File对象,你就可以使它工作。这是正确的方法。

public class MyClass {

    public boolean isMp3(File file) {
        Pattern pattern;
        final String FILE_PATTERN = "([^\\s]+(\\.(?i)(mp3))$)";
        pattern = Pattern.compile(FILE_PATTERN);
        Matcher matcher = pattern.matcher(file.toString());
        if (matcher.find()) {
            return true;
        } else {
            return false;
        }
    }

    public void myMethod() {
        File file = new File("file1.mp3");
        if (isMp3(file)) {
            System.out.println("is an  MP3");
        } else {
            System.out.println("not an MP3");
        }
    }

}

在您的示例中,调用代码可能如下所示,

File directoryItem;
// you get 'directoryItem' from somewhere. directoryItem of type 'File'
if (directoryItem.isFile() && isMp3(directoryItem)) {
    resultListOfFiles.add(directoryItem);
}

答案 1 :(得分:0)

您将该方法声明为私有,看起来您没有在类中使用它。如果将isMp3方法更改为public,则应解决您的问题。

有关详细信息,请参阅Controlling Access to Members of a Class

答案 2 :(得分:0)

您收到编译器错误,因为directoryItem与您isMp3定义的类(成员)的类型(类)不同。想一想isMp3是否在一个有意义的类中定义,如果没有,则重构,因为这会表明糟糕的类设计。