OOP Wrapper ermöglicht Zugriff für andere Packages?

flossy

Mitglied
Ich versuche gerade die Java Modifier etwas genauer zu verstehen.
Angenommen ich möchte Bibliothek erstellen, die Klassen verwedent, die nicht von außen für den Library-Nutzer sichtbar sein sollen, so mache ich doch folgendes:

Java:
package org.my.library;

public final class MyInternalClass{

  protected MyInternalClass(){
    // ...
  }

  protected void anInternalMethod(){
    // ...
  }
}
richtig?

Wenn der Entwickler nun aus seinem package org.developer.application zugreifen will, so kann er MyInternalClass ja nicht instanzieren. Er könnte jedoch ein Wrapper schreiben:
Java:
package org.my.library;

public class MyWrapperClass{

  private MyInternalClass c;

  public MyWrapperClass(){
    c = new MyInternalClass();
  }

  public void anInternalMethod(){
    c. anInternalMethod();
  }
}
richtig?

Damit können nun aus dem package org.developer.application die internen Methoden von MyInternalClass aufgerufen werden. richtig?

Kann man dies auch verhindern?
 
Ich verstehe nicht ganz, wie das mit dem Wrapper funktionieren soll. Wenn der in einem anderen Package liegt, kann der die protected Methoden an der Klasse nicht aufrufen, auch wenn er sich eine solche Variable hält.

Ok, wenn er den Wrapper ins gleiche Package schmeißt müsstest Du die Methoden natürlich private machen. Wenn das nicht geht, müsstest Du ihm wohl den schreibenden Zugang zu den Packages verwähren.
 
Zuletzt bearbeitet:
Ich verstehe nicht ganz, wie das mit dem Wrapper funktionieren soll. Wenn der in einem anderen Package liegt, kann der die protected Methoden an der Klasse nicht aufrufen, auch wenn er sich eine solche Variable hält.
Daher steht er ja im gleichen Package ;-)

Ok, wenn er den Wrapper ins gleiche Package schmeißt müsstest Du die Methoden natürlich private machen.
Nun, wenn ich die Methoden auf private setze, dann können andere Klassen aus dem Paket wiederum nicht zugreifen, was jedoch gewünscht ist.

Wenn das nicht geht, müsstest Du ihm wohl den schreibenden Zugang zu den Packages verwähren.
Was ist damit gemeint? Wie macht man das?
 
Gehen wir davon aus, dass du da wirklich eine Library machen willst, dann wird diese sowieso innerhalb einer *.jar datei stehen und damit kann sich niemand mehr an dein Package anbinden.
Die Klasse wäre damit nach außen hin unsichtbar!

Sind die Klassen nicht in einer Jar exportiert worden, kann man sich auch in das Package einklinken
 
> und damit kann sich niemand mehr an dein Package anbinden.

packages sind keine Verzeichnisse, lassen sich überall deklarieren

-----

@flossy
erstelle dir ein package java.lang und darin eine Klasse,
versuche die zu initalisieren oder darin eine main zu starten

->
java.lang.SecurityException: Prohibited package name: java.lang
at java.lang.ClassLoader.preDefineClass(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
..

was man dafür an Security einstellen muss, kann ich nicht sagen, aber irgendwie dürfte eine Möglichkeit bestehen

edit:
Controlling Package Access With Security Permissions and Sealed JAR Files
 
Zuletzt bearbeitet von einem Moderator:

Neue Themen


Zurück
Oben