Hej!
Jag har en metod för att ta bort poster från en databas och den fungerar fint när den är definierad för en viss datatyp. För att inte behöva skapa en likadan metod för alla datatyper, så skulle jag vilja göra denna metod datatypsoberoende. Det är bara en del av programmet, som jag behöver ändra, men problemet är att jag inte vet hur jag ska göra.
Är det någon som har ett/flera förslag på hur jag kan gå tillväga?
Jag skulle vilja kunna anropa denna metod på följande sätt:
Du skickar in objekt rakt igenom (Double i stället för double, Integer i stället för int etc.), använder compareTo och equals för att testa värden, samt getObject i ResultSet för att läsa värdet. Eller, det är en kvalificerad gissning iaf :)
\r Sen skulle jag vilja tillägga att jag inte gillar din lösning för att kolla hur du ska jämföra (för det första är if-satser är av ondo, och för det andra är den inte typsäker). I Java 5 kan du använda en enum på ett rätt snyggt sätt för att lösa det:
enum ComparisonOperator {
LESS () { boolean holdsFor(Object a, Object b){ return a.compareTo(b) < 0; } },
EQUAL () { boolean holdsFor(Object a, Object b){ return a.compareTo(b) == 0; } },
GREATER () { boolean holdsFor(Object a, Object b){ return LESS.holdsFor(b, a); },
LESS_EQ () { boolean holdsFor(Object a, Object b){ return !GREATER.holdsFor(b, a); },
NOT_EQUAL () { boolean holdsFor(Object a, Object b){ !EQUAL.holdsFor(a, b); } },
GREATER_EQ () { boolean holdsFor(Object a, Object b){ return !LESS.holdsFor(b, a); };
boolean holdsFor(Object a, Object b){ return false; }
}
// ...
public void delete(String column, ComparisonOperator cmpOp, Object value) throws IOException {
// ...
if (cmpOp.holdsFor(row.getObject(column), value) {
// värdet i raden uppfyller villkoret
}
}
// ...
delete("stringcol", ComparisonOperator.NOT_EQUAL, "Iä! Cthulhu f'taghn"); // alla rader som inte motsvarar strängen
delete("doublecol", ComparisonOperator.LESS, new Double(5)); // alla rader som är mindre än 5