Получение данных из абстрактного класса - PullRequest
1 голос
/ 22 февраля 2012

У меня проблемы с доступом к некоторым данным.Я использую YCSB для связи с рядом различных баз данных, таких как Cassandra и MongoDB.

Единственный класс, который я действительно могу изменить, - это мой класс "Workload", который выполняет некоторые вставкии читает.Метод, который я использую для чтения из базы данных, находится в классе:

public void doRead(DB db)
{
    String keyname = buildKeyName(keynum);
    System.out.println(keyname);
    HashSet<String> fields = null;

    if (!readallfields)
    {
        // read a random field
        String fieldname = "field" + fieldchooser.nextString();
        fields = new HashSet<String>();
        fields.add(fieldname);
    }

db.read(table,keyname,fields,new HashMap<String,ByteIterator>());
}

Я попытался изменить код, чтобы я мог прочитать содержимое хэш-карты.Я удалил строку db.read и заменил ее на

HashMap<String, ByteIterator> kv_hashmap = new HashMap<String, ByteIterator>();
db.read(table, keyname, fields, kv_hashmap);

Затем попытался прочитать из kv_hashmap:

System.out.println(kv_hashmap.get(fields));

НО db.read возвращает только int,DB - это публичный абстрактный класс, который я бы предпочел не изменять, и его цель - общаться с различными базами данных:

Это то, что db.read называет:

public abstract int read(String table, String key, Set<String> fields, HashMap<String,ByteIterator> result);

, который возвращает,процитировать из javadoc:

Ноль при успехе, ненулевой код ошибки при ошибке или "не найден".

Мне нужно прочитать значения из kv_hashmap,Я не понимаю, почему я не могу получить доступ к его значениям.

1 Ответ

0 голосов
/ 25 февраля 2013

Я посмотрел на реализацию класса DB, и Javadoc дополнительно говорит:

 @param result A HashMap of field/value pairs for the result

Но я также посмотрел на BasicDB, который расширяет DB - и его тело просто печатаетиз полей, переданных.

Я предлагаю вам распечатать фактический конкретный класс DB, передаваемый в ваш метод, и посмотреть, что этот класс на самом деле делает внутри метода read, что-то вроде:

System.out.println(Test.class.getName());

Затем взгляните на метод read того класса, который показан - если он не заполняет result HashMap (как в реализации BasicDB), тогда для вас ничего не будетчитать

...