Использование Guava CacheBulilder () для создания расширенного объекта AbstractCache () - PullRequest
0 голосов
/ 26 октября 2018

Я бы хотел расширить класс AbstractCache () в Guava (реализация интерфейса 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, облегчающая программистамрасширить свой собственный класс, предположительно, чтобы построить кеш из него.

1 Ответ

0 голосов
/ 29 октября 2018

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

Как примечание: почему вы вообще расширяете AbstractCache? Может быть, кофеина будет достаточно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...