views:

44

answers:

2

Hello.

I'm developing an Android application.

I have the following interface:

public interface IDBAdapter {

    public enum Table {
        ...
    }
    public int insertItem(Table table, Object item);
    public boolean removeItem(Table table, long rowIndex);
    public Cursor getAllItemsCursor(Table table);
    public Cursor setCursorToItem(Table table, long rowIndex);
    public void getItem(Table table, long rowIndex);
    public boolean updateItem(Table table, long rowIndex, Object item);
}

For each table defined on enum Table, it will be an object that represents that table.

My problem is about parameter Object item. I will have to unbox each item every time I call one of this methods and I don't know if this will be very slow for Android.

Do you know a better solution? I don't want to create a DBAdapter for each table because I should share SQLiteDatabase object between each other.

UPDATE:

Here is an example of object that I need to pass to those methods:

public class GameDescriptionData {
    public int gameId;
    public char[] language = new char[5];
    public String name;
    public String description;

    public GameDescriptionData() {
    }
}

Thanks.

+2  A: 

You haven't said what kind of values you're putting into the tables. Unless you're inserting primitive values, there won't be any boxing involved. For example, if item is a String reference, that doesn't need boxing because it's a reference already.

I suggest you try your ideal design before changing it for the sake of performance concerns. Admittedly I'm not entirely convinced this is a great design to start with, but it's hard to say without knowing more about your application.

Jon Skeet
Thanks for your answer. I've updated my question with an example for Object item.
VansFannel
@VansFannel: Well as that's a class, there won't be any boxing involved.
Jon Skeet
@Jon Skeet: You've said: "Admittedly I'm not entirely convinced this is a great design to start with,..." What do you suggest?
VansFannel
@VansFannel: I couldn't possibly suggest a design without knowing details about what you're trying to do... and I'm afraid I don't have the time (at least today) to look at any details. Maybe this *is* a good design for you... but I rarely use just `Object` in Java these days...
Jon Skeet
Ok. Thanks for your help.
VansFannel
+1  A: 

I would suggest the strategy pattern to impl the distinct care for each expected item.
Define DBAdapterStrategyFactory that will store all the strategies together based on their class type. This way, when calling operations on Object item you can pull that strategy from the factory and share most of the IDBAdapter code.

Bivas