2012-03-23 2 views
1

J'essaie de supprimer l'entrée du carnet d'adresses où l'entrée est le nom, mais je reçois java: 148 erreur: types incompatibles return fileToDelete.delete();Types incompatibles?

required: AddressBookEntry 
found: boolean 

1 erreur

Le code en question est:

public class AddressBookDelegateImpl implements AddressBookDelegate { 

    private File userHomeDir; 

    private File addressBookDirectory; 
    private String replaceSpacesWithUnderScores(String string) { 
     return string.replaceAll(" ", "_").toLowerCase(); 
    } 

    public AddressBookEntry deleteAddressBookEntry(String name) 
           throws AddressBookDelegateException { 

     try{ 
      String dname = replaceSpacesWithUnderScores(name); 
      File fileToDelete = new File(addressBookDirectory, dname); 
      return fileToDelete.delete() ; 
     } catch(NullPointerException e) { 
      throw new AddressBookDelegateException("Could not find the file", e); 
     } 
     } 
    } 

Répondre

0

File.delete() retour un booléen ...

0

Eh bien l'erreur décrit déjà très bien. La méthode delete renvoie un booléen si la suppression a abouti ou non. Donc, vous devriez vérifier cette valeur de retour si c'est vrai, puis retourner le AddressBookEntry que vous avez supprimé.

2

Votre méthode retourne et AddressBookEntry dans sa déclaration:

public AddressBookEntry deleteAddressBookEntry(String name) 

alors que la déclaration de retour Says:

return fileToDelete.delete() ; 

Vous voudrez peut-être envisager de déclarer AddressBookEntry type de retour comme boolean comme ceci:

public boolean deleteAddressBookEntry(String name) 
+0

Ouais Merci Fait que j'ai changé enfait l'interface consequently.I avait aussi une classe supprimerAction qui avait: – CCharles

+0

Ouais Merci fait ce que j'ai changé enfait l'interface en conséquence J'ai également eu une classe DeleteAction qui avait: try { AddressBookEntry addressBookEntry = addressBookDelegate.deleteAddressBookEntry (nom); – CCharles

+0

Maintenant, il compile. L'application permet à l'utilisateur d'ajouter une nouvelle adresse, voir les détails d'une entrée en demandant à l'utilisateur d'entrer le nom, voir tous les noms dans le carnet d'adresses. Maintenant, nous incorporons une fonction de suppression qui demande à l'utilisateur d'entrer le nom à supprimer. Je récupère ensuite les attributs de ce nom comme addressbookentry et maintenant je suis censé supprimer cette entrée. Quand je cours avec les changements suggérés j'obtiens une exception de pointeur nul! – CCharles

0

En Java, le re Le type de virage de la méthode est défini dans la déclaration de la méthode. Donc, dans votre exemple, vous avez:

public AddressBookEntry deleteAddressBookEntry(String name)throws AddressBookDelegateException { 

     try{ 
      String dname = replaceSpacesWithUnderScores(name); 
      File fileToDelete = new File(addressBookDirectory, dname); 
      return fileToDelete.delete() ; //this returns a boolean 
     } catch(NullPointerException e) { 
      throw new AddressBookDelegateException("Could not find the file", e); 
     } 
    } 

Donc, si vous préférez ne pas changer votre méthode de retour, ce qui est probablement ce que vous voulez faire, vous devriez essayer ce code à la place:

public boolean deleteAddressBookEntry(String name)throws AddressBookDelegateException { 

     try{ 
      String dname = replaceSpacesWithUnderScores(name); 
      File fileToDelete = new File(addressBookDirectory, dname); 
      return fileToDelete.delete() ; //this returns a boolean 
     } catch(NullPointerException e) { 
      throw new AddressBookDelegateException("Could not find the file", e); 
     } 
    } 

Ce qui renvoie le résultat de la méthode fileToDelete.delete().

0

s'il vous plaît modifié votre méthode deleteAddressBookEntry comme ci-dessous:

public Boolean deleteAddressBookEntry(String name) 
       throws AddressBookDelegateException { 
      try { 
       String dname = replaceSpacesWithUnderScores(name); 
       File fileToDelete = new File(addressBookDirectory, dname); 
       if(fileToDelete.exists()) 
        return fileToDelete.delete(); 
      } catch (NullPointerException e) { 
       throw new AddressBookDelegateException("Could not find the file", e); 
      } 
      return false; 
     }