/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Begynder: Manipulere med objekter i ArrayL~
Fra : Torben


Dato : 24-10-04 12:37

Hej NG,

Jeg har et ArrayList med objekter som er instanser af samme klasse. Jeg vil
gerne kunne manipulere med disse afhængig af forskellige betingelser. Eks
indeholder arraylisten objekter af typen Bil som har felter som mærke,
model, km, pris. Objekterne har accesor/mutator metoder til at hente/ændre
disse værdier. Hvis jeg nu eks vil hive alle objekter ud som er af mærket
Opel og slette disse eller give 20% rabat på alle mærker som har kørt mere
end 200.000 km hvad er så smartest? Lige nu kan jeg godt se at eksempelvis
at fjerne et objekt kan gøres med klassen iterator's remove metode men skal
jeg virkelig løbe hele listen igenem hvergang og gøre det for ét objekt af
gangen? Og ville gerne have noget mere "generisk" så jeg kunne angive om det
var prisen etc som skulle manipuleres denne gang.



 
 
Jonas Kongslund (24-10-2004)
Kommentar
Fra : Jonas Kongslund


Dato : 24-10-04 17:20

On Søndag 24 oktober 2004 13:36, Torben wrote:

> Hej NG,
>
> Jeg har et ArrayList med objekter som er instanser af samme klasse. Jeg
> vil gerne kunne manipulere med disse afhængig af forskellige betingelser.
> Eks
> indeholder arraylisten objekter af typen Bil som har felter som mærke,
> model, km, pris. Objekterne har accesor/mutator metoder til at
> hente/ændre disse værdier. Hvis jeg nu eks vil hive alle objekter ud som
> er af mærket Opel og slette disse eller give 20% rabat på alle mærker som
> har kørt mere end 200.000 km hvad er så smartest? Lige nu kan jeg godt se
> at eksempelvis at fjerne et objekt kan gøres med klassen iterator's remove
> metode men skal jeg virkelig løbe hele listen igenem hvergang og gøre det
> for ét objekt af gangen? Og ville gerne have noget mere "generisk" så jeg
> kunne angive om det var prisen etc som skulle manipuleres denne gang.

Man kan diskutere hvor stort udbyttet vil være, men here goes...

Forneden har jeg skitseret en delvis løsning, hvor det er muligt at kalde
operationer på bilerne i arraylisten, men hvor det ikke er muligt at mutere
arraylisten. Den del får du selv lov til at prøve kræfter med (Det er ikke
så svært).

Nedenstående er et eksempel på (hjemmebrygget) reflektion. En essentiel
detalje i nedenstående at begrebet biloperation reificeres (dvs. gøres
explicit i sproget ved at repræsentere den som en klasse eller et
interface).

public interface Car {
double getKm(); void setKm(double km);
double getPrice(); void setPrice(double price);
String getModel(); void setModel(String model);
}

public interface CarOperation {
void doOperation(Car car);
}

public class CarProgram {
private static List cars = new java.util.ArrayList();

public static void main(String[] args) {
// Indsæt nogle biler i cars
// cars.add(new CarImpl(...));
// ...

CarOperation giveDiscountOp = new CarOperation() {
public void doOperation(Car car) {
car.setPrice((1 - 0.20) * car.getPrice());
}
};

invokeCarOperation(giveDiscountOp);
}

public static void invokeCarOperation(CarOperation carOp) {
java.util.Iterator iter = cars.iterator();
while (iter.hasNext()) {
Car car = (Car) iter.next();
carOp.doOperation(car);
}
}
}

Bruger du Java 1.5, så er det langt mere elegant at gøre brug af de nye
sprogfaciliteter:

void giveDiscount(List<Car> cars) {
for (Car car : cars)
car.setPrice((1 - 0.20) * car.getPrice());
}

--
Jonas Kongslund

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste