2014-02-10 28 views
0

我創建私有布爾方法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」語句?

+0

'isMp3'可能沒有錯。請包括編譯錯誤和更多細節,以確定'isMp3'方法的定義。 – hsun324

+0

你從哪裏調用這個方法?私人意味着你不能從其他類使用它,請記住......包括子類。 – keshlam

+1

'directoryItem'是什麼類型? – Claus

回答

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); 
} 
0

您正在將該方法聲明爲私有方法,看起來您並未在該類中使用該方法。如果您將isMp3方法更改爲public,則應解決您的問題。

有關更多信息,請參閱Controlling Access to Members of a Class

+1

如果這是實際問題,那麼編譯器會說'類型名稱的方法isMp3()不可見'。當編譯器抱怨該方法對於該類型未定義時,這意味着在類中不存在此類方法。 – spiderman

+0

我的不好。沒有仔細閱讀錯誤,直接跳到代碼中。 – jdanielson

0

你得到的編譯錯誤,因爲directoryItem是不一樣的類型(類)的類,你有isMp3定義(會員)。考慮isMp3是否在有意義的類中定義,如果不是,則重構,因爲這將表示較差的類設計。

相關問題