【问题标题】:Method is undefined for the type. Help me fix it该类型的方法未定义。帮我修一下
【发布时间】:2014-02-10 23:41:48
【问题描述】:

我创建了私有布尔方法 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”语句?

【问题讨论】:

  • isMp3 可能没什么问题。请包括编译错误和更多关于isMp3 方法定义位置的详细信息。
  • 你从哪里调用这个方法?私有意味着你不能在其他类中使用它,记住……包括子类。
  • directoryItem是什么类型的?
  • DirectoryItem 是文件,我在创建方法的类中使用此方法。我没有错误日志,日食与我交战。
  • @Rudik 如果是java.io.File,则不能调用isMp3()(因为它不是File 的成员函数)。为什么不将File 对象作为参数传递给您的方法?

标签: java file methods boolean


【解决方案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);
}

【讨论】:

    【解决方案2】:

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

    请参阅Controlling Access to Members of a Class 了解更多信息。

    【讨论】:

    • 如果这是实际问题,那么编译器会说类似 'The method isMp3() from the type Classname is not visible' 。当编译器抱怨该类型的方法未定义时,这意味着该类中不存在这样的方法。
    • 我的错。没有仔细阅读错误并直接跳入代码。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2022-11-03
      • 1970-01-01
      • 1970-01-01
      • 2014-08-04
      • 2012-08-07
      • 2013-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多