2014-07-17 14 views
6

Ich entwickle eine Bibliothek (jar) für Android und habe eine Situation, wo ich meine Klasse oder Methode nur innerhalb meiner Bibliothek zugänglich sein möchte, aber nicht außerhalb meiner Bibliothek. Wenn kein Modifier verwendet wird, wird Klasse innerhalb dieses Pakets zugänglich gemacht, aber ich bin in einer Situation, in der diese Klasse nicht ohne Modifizierer public verwendet werden kann, da die Verwendung von keinem Modifier in anderen Paketen, die ich nicht möchte, unzugänglich ist. Zum Beispiel ich eine Klasse sagen,Hide Methode/Klasse mit @Hide in Annotation

public class Globals { 

    public static String thisDeviceAddress; 
    public static String thisDeviceIP; 
    public static String thisDeviceName = ""; 

} 

Diese Klasse überall zugänglich ist. Das Problem ist, dass ich möchte, dass es innerhalb meiner Bibliothek zugänglich ist, die ich entwickle, aber nicht außerhalb der Bibliothek. Ich habe erfahren, dass die Verwendung der Annotation @hide das Problem lösen wird. Zum Beispiel:

/** 
* @hide 
*/ 
class Globals { 

    public static String thisDeviceAddress; 
    public static String thisDeviceIP; 
    public static String thisDeviceName = ""; 
} 

Ich googeln darüber viel, kann aber nicht einen Weg zu implementieren @hide finden. Wenn Sie nur @hide ohne eine Bibliothek verwenden, wurde die Klasse nicht ausgeblendet. Also, bitte geben Sie mir die richtige Anleitung. Welche Bibliothek soll verwendet werden? ein Ausweg, um dieses Problem zu lösen?

+0

'@ hide' wird nicht funktionieren - es entfernt nur ein Symbol aus dem Stub android.jar, wenn das SDK erstellt wird, so dass Code nicht geschrieben werden kann, um direkt darauf zuzugreifen. Die Symbole sind in der Laufzeit vorhanden und können über Reflektion aufgerufen werden. Aber das ist keine Lösung für Ihr Problem. – laalto

+0

Danke für die Antwort. Ich habe kein Problem, wenn Klasse/Methode durch Reflektion zugänglich gemacht wird. Aber ich möchte nicht, dass es direkt sichtbar ist. Wenn es funktioniert, lassen Sie mich bitte wissen, was für die Verwendung von @hide eingerichtet werden muss. – Dipendra

+0

@Dipendra, ich habe die gleiche Situation hier. Haben Sie eine Lösung dafür gefunden? –

Antwort

0

Es gibt keine Möglichkeit, öffentliche Klassen und Methoden zu verbergen. Es ist Java-Sprachspezifikation, und Sie können das nicht brechen.