[Java] Waar stop je algemene functies?*

Pagina: 1
Acties:

  • spaceboy
  • Registratie: Februari 2001
  • Nu online

spaceboy

Op grote hoogte

Topicstarter
Howdy. Ik ben redelijk ervaren met programmeren, maar vrij nieuw met Java. Nu heb ik een vraag, ik ben bezig met een zeer object-georienteerd Java-projectje. Gewoon knutsel-matig. Nu snap ik alle classes en het instantieren/elkaar aanroepen van deze classen helemaal.

Echter, ik heb ook behoefte aan een paar functies die ik niet "logisch in een class" kwijt kan, namelijk file handling. Ik heb bijvoorbeeld een functie gemaakt die uit een XML-bestand data haalt en in een Array List plaatst. Dit is zeg maar de functie

public ArrayList getExternalData()

Vraag is nu: WAAR laat ik deze functie! Ik heb het nu werkend door een class FileHandler te maken, waarvan getExternalData() een functie is. Maar om deze te gebruiken moet ik in een aanroepende (test)class dus zoiets doen:

FileHandler fhBestand = new FileHandler();
ArrayList alLijst = fhBestand.getExternalData();

Maar dat WIL ik eigenlijk niet, want ik vind het niet logisch om een "fake" FileHandler object te instantieren. Snappen jullie m'n vraag? ;) Kortom: hoe krijg ik het voor elkaar om op een bepaalde manier functies in mijn project kwijt te kunnen die ik kan gebruiken zonder object-georienteerd bezig te zijn!?

Aan bovenstaande tekst kunnen geen rechten worden ontleend. Aan de tekst hieronder wel.


  • Nvidiot
  • Registratie: Mei 2003
  • Laatst online: 11-01 23:32

Nvidiot

notepad!

Class methods. Die zijn onderdeel van de class, niet van een instantie. Dan krijg je dus iets als

ArrayList alLijst = FileHandler.getExternalData();

What a caterpillar calls the end, the rest of the world calls a butterfly. (Lao-Tze)


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

Alarmnummer

-= Tja =-

Vaak kom ik bij Util achtige classes uit:

Check bv Collections van het collection framework. Dat is ook zo`n Util class

Maar in jouw geval zal denk ik een static methode (die heb je dus ook in de util classes) bij jouw FileHandler het handigste zijn.

code:
1
2
3
public class FileHandler {
    public static List getExternalData(){return ... }
}


en dan aanroepen met:
List data = FileHandler.getExternalData();

[ Voor 29% gewijzigd door Alarmnummer op 16-06-2005 19:25 ]


  • ShadowrunR
  • Registratie: Maart 2002
  • Laatst online: 25-04 18:19
En je persistancy-layer? Of gebruik je die niet?
Meestal schrijf ik m'n progs in 3 layers: GUI, Business en Persistency die elk een package zijn.
Dus als je die FileHandler in de package Persistency gooit zit't toch redelijk op z'n plaats denk ik?

Eventueel kun je er nog steeds een Singleton van maken als je hem niet wenst te instantieren, dan kun je die methode gewoon overal aanroepen met
code:
1
Persistency.FileHandler.getInstance().getExternalData();


Singleton-klasse maken:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
public class FileHandler {
   private static FileHandler instance = null;

   protected FileHandler () {
      // Exists only to defeat instantiation.
   }

   public static FileHandler getInstance() {
      if(instance == null)
         instance = new FileHandler ();
      return instance;
   }
}

  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 08:26
ShadowrunR schreef op vrijdag 17 juni 2005 @ 00:25:

Eventueel kun je er nog steeds een Singleton van maken als je hem niet wenst te instantieren, dan kun je die methode gewoon overal aanroepen met
Dan ben je beter aan een klasse met een static methode, zoals al eerder aangegeven.

Verwijderd

beetje offtopic:
ShadowrunR schreef op vrijdag 17 juni 2005 @ 00:25:
[..]
Singleton-klasse maken:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
public class FileHandler {
   private static FileHandler instance = null;

   protected FileHandler () {
      // Exists only to defeat instantiation.
   }

   public static FileHandler getInstance() {
      if(instance == null)
         instance = new FileHandler ();
      return instance;
   }
}
Een singleton klasse maken kan makkelijker volgens mij:
Java:
1
2
3
4
5
6
7
8
9
10
11
public class FileHandler {
   private static FileHandler instance = new FileHandler();

   protected FileHandler () {
      // Exists only to defeat instantiation.
   }

   public static FileHandler getInstance() {
      return instance;
   }
}


Ontopic: afhankelijk van of er data bewaard moet blijven tussen je functie aanroepen, gebruik ik zo'n singleton constructie of static methodes.

  • The-MeLLeR
  • Registratie: Juni 2004
  • Laatst online: 27-02 11:20

The-MeLLeR

3l33t

Ik zou het gewoon zo doen:
Java:
1
2
3
4
5
6
public class FileHandler{
     public static ArrayList getExternalData(){
          //do something here and
          //return the list
     }
}

Dan kan je in je app gewoon het volgende doen:
Java:
1
ArrayList alLijst = FileHandler.getExternelData();


Succes

  • momania
  • Registratie: Mei 2000
  • Laatst online: 08:02

momania

iPhone 30! Bam!

ShadowrunR schreef op vrijdag 17 juni 2005 @ 00:25:
Eventueel kun je er nog steeds een Singleton van maken als je hem niet wenst te instantieren
Een singleton is in dit geval gewoon zonde, aangezien je helemaal geen class variabelen hoeft te hebben en alleen maar een static method nodig hebt.

Ofwel, zo'n Utility class als Alarmnummer al noemde is voor dit geval een prima oplossing :)

[ Voor 12% gewijzigd door momania op 17-06-2005 19:19 ]

Neem je whisky mee, is het te weinig... *zucht*

Pagina: 1