[design prop] functie public/private

Pagina: 1
Acties:

  • NDF82
  • Registratie: Januari 2002
  • Laatst online: 26-08 21:49

NDF82

Doomed Space Marine

Topicstarter
Ik zit met een probleempje. Ik heb een class AClass:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class AClass
{
  ...
  public BClass getBClass()
  {
    BClass bClass = new BClass();
    
    bClass.setVarX('x');
    bClass.setVarY(3);
    bClass.setVarZ("variabele z");

    return bClass;
  }
  ...
}

Nu wil ik dat de functies
code:
1
2
3
bClass.setVarX('x');
bClass.setVarY(3);
bClass.setVarZ("variabele z");

alleen vanuit AClass aangeroepen kunnen worden. Weet iemand hier mischien een nette oplossing voor??

Pentium 233MHz MMX + Diamond Monster 3D 3DFX Voodoo II


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Java (zo te zien) kent geen 'friends' zoals C++, dus is het niet mogelijk wat jij wilt, aangenomen dat beide klassen 'public' moeten zijn.

Als je dit echt heel erg percee wilt, kan je nog naar inner-classes grijpen, maar daar wordt het allemaal niet fraaier op.

Ook kan je via een hele ranzige constructie wel achterhalen vanuit welke klasse een methode wordt aangeroepen, maar ook dat kan ik je niet aanraden aangezien dit slechts een runtime check is.

Geen nette oplossing dus :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • bazzs2001
  • Registratie: April 2002
  • Laatst online: 13-06 11:18

bazzs2001

je moet knagen wat lekker is

dit is misschien een stomme vraag, maar waarom wil je dat doen?

groeten


  • NDF82
  • Registratie: Januari 2002
  • Laatst online: 26-08 21:49

NDF82

Doomed Space Marine

Topicstarter
heb mischien al een oplossing, weet alleen niet of het werkt :)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class AClass
{
  ...
  public BClass getBClass()
  {
    CClass cClass = new CClass();
    
    cClass.setVarX('x');
    cClass.setVarY(3);
    cClass.setVarZ("variabele z");
    return (BClass)cClass;
  }
  
  private class CClass extends BClass
  {
    public void setVarX(char c)   x = c;
    public void setVarY(int i)    y = i;
    public void setVarZ(String s) z = s;
  }
}

public class BClass
{
  protected char   x;
  protected int    y;
  protected String z;

  ...
}

mBravenboer, is dit wat je bedoelde met innerclasses??

Bas, dit is voor m'n MSN client, het is de bedoeling dat de gebruiker van m'n package zo min mogelijk kan verne*ken 8-)

Pentium 233MHz MMX + Diamond Monster 3D 3DFX Voodoo II


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
NDF82: mBravenboer, is dit wat je bedoelde met innerclasses??
Ja, dit werkt inderdaad wel, maar het is niet zo netjes om alleen maar om deze reden een inner-class te gaan gebruiken.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Op vrijdag 26 juli 2002 20:18 schreef mbravenboer het volgende:
Ook kan je via een hele ranzige constructie wel achterhalen vanuit welke klasse een methode wordt aangeroepen.
*kuch kuch* :+

Ik ben zelf ook wel eens met dit soort dingen bezig geweest, om alles zo dicht mogelijk te timmeren. Meestal gaat je ontwerp volledig in de vernieling, en ik doe er niet meer zo moeilijk over. Tenzij je echt een erg goeie reden hebt (data corruptie ed) zou ik gewoon hier van afzien.

ps: eventueel kan je die 'gevaarlijke methodes' ook protected of friendly maken (dus geen access modifier). Hierdoor kan jij alleen bij methodes komen, en iemand die in een andere package zit niet.

ps2: de gebruiker van jouw api die kan dit ook nog weer zelf omzeilen, door een nieuwe package te maken gelijk aan die van jouw. Dus als jij com.msn hebt voor jouw api, dan moet die eind gebruiker die ook aanmaken, en dan kan hij alsnog bij jouw ontoegankelijke methodes want hij zit in principe in dezelfde package :D
Pagina: 1