2010-03-31 8 views
1

je cette fonction qui retourne un type de données InetAddress []Eclipse me donne une erreur bizarre lors de la compilation

public InetAddress [] 
lookupAllHostAddr(String host) throws UnknownHostException { 
    Name name = null; 

    try { 
     name = new Name(host); 
    } 
    catch (TextParseException e) { 
     throw new UnknownHostException(host); 
    } 

    Record [] records = null; 
    if (preferV6) 
     records = new Lookup(name, Type.AAAA).run(); 
    if (records == null) 
     records = new Lookup(name, Type.A).run(); 
    if (records == null && !preferV6) 
     records = new Lookup(name, Type.AAAA).run(); 
    if (records == null) 
     throw new UnknownHostException(host); 

    InetAddress[] array = new InetAddress[records.length]; 
    for (int i = 0; i < records.length; i++) { 
     Record record = records[i]; 
     if (records[i] instanceof ARecord) { 
      ARecord a = (ARecord) records[i]; 
      array[i] = a.getAddress(); 
     } else { 
      AAAARecord aaaa = (AAAARecord) records[i]; 
      array[i] = aaaa.getAddress(); 
     } 
    } 
    return array; 
} 

Eclipse se plaint que le type de retour doit être byte [] [] mais quand je change le type de retour à byte [] [], il se plaint que la fonction retourne le mauvais type de données. Je suis coincé dans une boucle. Est-ce que quelqu'un sait ce qui se passe ici?

+0

D'abord, vous devriez apprendre à utiliser les classes Collections au lieu des tableaux raw. Deuxièmement, vous devez apprendre à utiliser le nouveau pour chaque construction au lieu d'itérer sur les tableaux avec un compteur, il est répandu pour des erreurs au mieux. –

Répondre

1

Un peu de recherches sur lookupAllHostAddr révèle ce qui suit:

L'interface a été modifiée sun.net.spi.nameservice.NameService pour JDK 6 d'une manière qui rend impossible pour le code source Java déclare une classe qui peut implémenter l'ancienne ou la nouvelle version (le type de retour de la méthode lookupAllHostAddr a été modifié de byte[][] à InetAddress[]). L'utilisation de JDK 6 doit résoudre ce problème!

+0

Super ... merci pour ça ...! – Legend

1

Ce code est assez déroutant. Il est impossible de savoir ce qui se passe sans connaître les autres classes qui sont les vôtres.

Il y a beaucoup de choses à ne pas aimer dans ce code. Si je vois une boucle sur un ensemble d'objets qui dépend de "instanceof" pour le bon fonctionnement, je ne peux pas m'empêcher de penser que le polymorphisme serait une meilleure solution.

Votre appel à new Lookup(name, type).run() me fait penser à Runnable et Threads, mais ce n'est pas ce que vous faites.

On dirait que vous essayez d'effectuer des recherches de serveur DNS. Je me demandais s'il n'y avait pas quelque chose déjà disponible pour aider (par exemple, Apache James).

MISE À JOUR:

J'ai essayé de prendre votre méthode et le faire fonctionner. J'ai enlevé les choses que je n'avais pas et réduit le problème à la chose la plus simple que je pouvais. Il a votre signature de méthode et le même type de retour. Cet exemple plus simple fonctionne. S'il y a un problème, ça doit être dans les choses que j'ai retirées. Désolé, je ne peux pas être plus utile.

import java.net.InetAddress; 
import java.net.UnknownHostException; 

public class HostLookup 
{ 
    public static void main(String[] args) 
    { 
     try 
     { 
      HostLookup lookup = new HostLookup(); 

      String host = ((args.length > 0) ? args[0] : "localhost"); 
      InetAddress [] allHostAddresses = lookup.lookupAllHostAddr(host); 
      for (InetAddress address : allHostAddresses) 
      { 
       System.out.println("address: " + address); 
      } 
     } 
     catch (UnknownHostException e) 
     { 
      e.printStackTrace(); 
     } 
    } 

    public InetAddress [] lookupAllHostAddr(String host) throws UnknownHostException 
    { 
     InetAddress[] array = InetAddress.getAllByName(host); 

     return array; 
    } 
} 
+0

Je souhaite que j'ai écrit ceci afin que j'aurais pu le corriger basé sur vos suggestions. Je joue avec un grand projet open source qui utilise plusieurs projets open source et j'essaie de le compiler correctement mais ça ne fonctionne pas ... Je pensais que ça avait peut-être quelque chose à voir avec la version jdk (j'utilise 1.5.0.11 actuellement), mais je n'ai pas sudo sur cette machine pour le mettre à niveau ... – Legend

+0

Merci pour votre temps. Changer ma version de JDK à 1.6 a résolu le problème. – Legend

Questions connexes