Использование guava cachebulilder () для создания расширенного объекта abstractcache ()

Я хотел бы расширить класс Guava AbstractCache () (реализация интерфейса Cache), чтобы переопределить некоторые встроенные функции интерфейса Cache.

Однако, поскольку CacheBuilder () обычно используется для создания кеша и возвращает объект типа Cache, я не уверен, как приступить к созданию кеша моего типа расширенного класса, поскольку использование CacheBuilder вернет тип родительского класса. Так что это было бы унижением.

import com.google.common.cache.{Cache, AbstractCache, CacheBuilder}

// this works normally
Cache validCache = CacheBuilder.newBuilder.build()

// extending AbstractCache, an abstract class implementation of Cache interface
class MyCache extends AbstractCache {...}

// this doesn't work since the return value of calling build()
// is Cache, parent type of MyCache
MyCache invalidCache = CacheBuilder.newBuilder.build()

Я думаю, что мне чего-то не хватает, поскольку в документации класса AbstractCache () конкретно говорится, что это реализация интерфейса Cache, чтобы программистам было проще расширять свой собственный класс, предположительно для создания из него кеша.

0
0
54
1

Ответы 1

Просто не используйте CacheBuilder, а создайте экземпляр своего MyCache непосредственно самостоятельно. CacheBuilder - это просто конструктор для экземпляров Cache (предполагается, что вы будете реализовывать любые причудливые вещи самостоятельно).

В качестве примечания, зачем вы вообще расширяете AbstractCache? Может, хватит Кофеин?

Другие вопросы по теме