Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Таблица с различными типами столбцов


Автор: kashka 2.4.2008, 19:03
Всем Servus!
Вообще то вопрос такой: есть таблица данных, столбцы могут быть разных типов (Float, String). Как эффективно выбрать подходящий формат?  Например можно было бы сохранить как двумерный массив из Object, но тогда придется каждый раз кастинг делать. А с Generics тоже не совсем получается:
Код

public class Column<T> {
    private ArrayList<T> cl;
    private int type;

    public Column() {
        cl = new ArrayList<T>();
    }
    
    public ArrayList<T> getCl() {
        return cl;
    }

    public void setCl(ArrayList<T> cl) {
        this.cl = cl;
    }
    
    
    public T getElement(int j) {
        return cl.get(j);
    }
    

И основной класс для Таблицы:
Код


public class Table {
    
    ArrayList<Column> table = new ArrayList<Column>();
    
    public void addColumn(int type) {
        if(type == Constants.NUMMERIC){
            table.add(new Column<Float>());
            Column<Float> c = table.get(0);
            ArrayList<Float> vC= c.getCl();
        }
    }
    
    public Column getColumn(int i){
        return table.get(i);
    }

}



Но проблема в том что в Table Column не параметризуем.
Как быть?

Автор: niasilil 3.4.2008, 00:21
я в String храню и parse делаю когда надо

Автор: w1nd 3.4.2008, 00:23
Цитата(niasilil @  3.4.2008,  00:21 Найти цитируемый пост)
я в String храню и parse делаю когда надо

С тем же учпехом можно параметризовать метод для доступа и замаскировать warnings. Будет шустрее ;)

Автор: niasilil 3.4.2008, 02:54
Цитата(w1nd @ 3.4.2008,  00:23)
Цитата(niasilil @  3.4.2008,  00:21 Найти цитируемый пост)
я в String храню и parse делаю когда надо

С тем же учпехом можно параметризовать метод для доступа и замаскировать warnings. Будет шустрее ;)

это да. Только преимущество - когда в табличке меняешь значение, то оно String становится вроде как. Не надо заботиться о переводе туда обратно. 
Не знаю, если кто укажет более изящный способ, возьму на вооружение. 
от warnings мне почему то неспокойно как то. smile

Автор: kashka 3.4.2008, 10:46
Ну со Strings это понятно, каждый раз делать:
Код

try {
            float f = Float.parseFloat(string);
        } catch (NumberFormatException e) {
            
        }


Но не хотелось бы как впрочем и Casting тоже, я вот думала может можно как нибудь элегантнее сделать. 

Автор: kashka 3.4.2008, 11:03
Мне вот пока только две наиболее подходящие идеи в голову пришли. Поделить таблицы на  две таблицы, одна с float другая с String (в этом случае придется правда глобальные индексы столбцов хранить). Или сделать два метода 
Код


ArrayList <Float> getNumericColumn(){}

ArrayList <String> getNominalColumn{}



В этом случае надо будет сначала каждый раз спрашивать какого типа колонка. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)