2010-08-06 5 views
4

Je viens de regarder dans le code de javax.ws.rs.core.MediaType et je me demandais à propos de throw new RuntimeException("Compiled Code"), puisque je n'ai jamais vu ça auparavant. Je pense que c'est une forme de "non mis en œuvre", mais je ne sais pas.throw new RuntimeException ("Code compilé")?

package javax.ws.rs.core; 

import java.util.Map; 
import javax.ws.rs.ext.RuntimeDelegate.HeaderDelegate; 

public class MediaType { 

    // some variables and constants ... 

    public static MediaType valueOf(String string) throws IllegalArgumentException { 
    //compiled code 
    throw new RuntimeException("Compiled Code"); 
    } 

    public MediaType(String string, String string1, Map<String, String> map) { 
    //compiled code 
    throw new RuntimeException("Compiled Code"); 
    } 

    public MediaType(String string, String string1) { 
    //compiled code 
    throw new RuntimeException("Compiled Code"); 
    } 

    ... 

} 

De quoi s'agit-il?

Répondre

7

Basé sur le fragment de code que vous avez posté je présume que vous regardez un fichier * .class et pas un fichier * .java? Si c'est le cas, le "code compilé" et // le code compilé sont là parce que votre IDE essaye de vous donner une représentation lisible des classes * .java compilées, de sorte que vous pouvez au moins regarder quelles sont les méthodes disponible dans cette classe.

Le "code compilé" n'est en aucun cas le message d'erreur correct qui est donné lorsque RunTimeException est levée.

La présentation du dossiers de * est différent dans chaque IDE (Eclipse, IntelliJ, ..)

Si vous voulez être en mesure de jeter un oeil au code qui est exécuté, vous aurez besoin du fichiers * .java non compilés.

+1

Vous avez probablement raison. Je ne pense pas que les classes javax. * Sont open source, donc il ne regarde certainement pas la source réelle. – Jorn

2

Vous avez navigué dans un fichier Java Class, auquel aucun fichier source n'a été associé.

Ce que vous voyez est le fichier MediaType.class représenté par l'EDI NetBeans. C'est fondamentalement la même sortie que vous verriez en appelant javap MediaType.class. Les exceptions sont là seulement pour vous avertir. Ce n'est pas le vrai contenu du fichier. Vous ne voyez que des signatures de méthode et des champs publics, puisque cela est exposé par le fichier .class de toute façon. Le reste est une implémentation qui a été omise, puisque sans code source, vous ne pouvez obtenir que du code machine (est-ce que vous aimeriez vraiment y creuser?) Vous préférez probablement lire d'autres documents, ou trouver des sources sur google).

JDK est divisé en interfaces de programmation publiques et privées. Le public est bien documenté et livré avec le code source. Ce n'est pas toujours la même chose avec une partie privée de l'API.

1

Pour ajouter aux autres réponses, vous pouvez afficher le contenu du fichier .class (instructions exécutées) à l'aide d'un décompilateur. Un bon est Java Decompiler à http://java.decompiler.free.fr/

0

J'ai le "même" code dans un fichier jar. Récemment, je travaillais avec ce fichier jar et je ne sais pas où je peux voir le code. Après ouvert le fichier dans NetBeans, voici le résultat:

public class ConsolaEjecucion extends JFrame { 

    private JPanel jContentPane; 
    private JScrollPane jScrollPane; 
    private JTextArea display; 
    private JProgressBar barraProgreso; 
    private JFrame frame; 

    public ConsolaEjecucion(JFrame frame) { 
     //compiled code 
     throw new RuntimeException("Compiled Code"); 
    } 

    private JPanel getJContentPane() { 
     //compiled code 
     throw new RuntimeException("Compiled Code"); 
    } 

    ... 

} 

Mais, le code fonctionnel est pas présent! Merci.

Questions connexes