2015-05-07 5 views
1

У меня есть проблема с воронкой guava, я прочитал эту статью https://code.google.com/p/guava-libraries/wiki/HashingExplained и другие, но я не знаю, как использовать воронку, когда мой класс содержит не только примитивные типы.Google Guava Hashing

Funnel<Person> personFunnel = new Funnel<Person>() { 
    @Override 
    public void funnel(Person person, PrimitiveSink into) { 
    into 
     .putInt(person.id) 
     .putString(person.firstName, Charsets.UTF_8) 
     .putString(person.lastName, Charsets.UTF_8) 
     .putInt(birthYear) 
     //.putObject(myObject,myObjectFunnel);I want to do something like this 
    } 
}; 

после мне нужно сделать, как этот

HashFunction hf = Hashing.md5(); 
HashCode hc = hf.newHasher() 
     .putObject(person, personFunnel) 
     .hash(); 

класса PrimitiveSink не метод putObject, только класс Hasher имеет его. Я могу преобразовать myObject в массив байтов и использовать метод putBytes, но, вероятно, кто-то знает лучший подход.

ответ

2

Вы правы: на данный момент это невозможно сделать только по методам, связанным API.

Но я вижу, что у вас есть myObjectFunnel. Так почему бы не использовать его?

насчет:

Funnel<Person> personFunnel = new Funnel<Person>() { 
    @Override 
    public void funnel(Person person, PrimitiveSink into) { 
    into 
     .putInt(person.id) 
     .putString(person.firstName, Charsets.UTF_8) 
     .putString(person.lastName, Charsets.UTF_8) 
     .putInt(birthYear); 
    myObjectFunnel.funnel(myObject, into); 
    } 
}; 
+0

о, это действительно хорошая идея, спасибо. – Dominic

Смежные вопросы