Java 8 Lambda用于匿名类

Java 8 Lambda用于匿名类,java,lambda,anonymous-class,Java,Lambda,Anonymous Class,这里有一个棘手的情况,我想从代码的角度对其进行优化。有没有办法通过Lambda/Java8表达式来缩短以下方法 // total amount of audiences registry.register("metric.persons.total", new CachedGauge<Integer>(1,TimeUnit.MINUTES) { @Override protected Integer loadValue() { return perso

这里有一个棘手的情况,我想从代码的角度对其进行优化。有没有办法通过Lambda/Java8表达式来缩短以下方法

// total amount of audiences
registry.register("metric.persons.total", new CachedGauge<Integer>(1,TimeUnit.MINUTES) {
    @Override
    protected Integer loadValue() {
        return personService.findAll().size();
    }
});
//观众总数
registry.register(“metric.persons.total”),新的CachedGauge(1,TimeUnit.MINUTES){
@凌驾
受保护的整数loadValue(){
return personService.findAll().size();
}
});
CachedGauge类如下所示:

public abstract class CachedGauge<T> implements Gauge<T> {
    protected CachedGauge(long timeout, TimeUnit timeoutUnit) {
        ...
    }

    protected abstract T loadValue();
        ...
    }
}
公共抽象类CachedGauge实现{
受保护的CachedGauge(长超时、TimeUnit timeoutUnit){
...
}
受保护的抽象T loadValue();
...
}
}
如果有办法的话,那就太好了,这里比较棘手的部分是有一个默认构造函数,并且类是参数化的

最好的,星期五

registry.register("metric.persons.total", 
    CachedGauge.of(1,TimeUnit.MINUTES, ()->personService.findAll().size() ) 
);

我认为您可以找到如何实现(long,TimeUnit,Supplier)的
CachedGauge.of
仅为了完成这个线程,我的Utils类如下所示

public class MetricUtils {

    public static <T> CachedGauge<T> cachedGauge(long timeout, TimeUnit timeoutUnit, Supplier<T> supplier) {
        return new CachedGauge<T>(timeout, timeoutUnit) {
            @Override
            protected T loadValue() {
                return supplier.get();
            }
        };
    }
}
公共类MetricUtils{
公共静态CachedGauge CachedGauge(长超时、TimeUnit timeoutUnit、供应商){
返回新的CachedGauge(超时,超时单位){
@凌驾
受保护的T加载值(){
返回供应商。get();
}
};
}
}

personService是来自匿名类的包含范围,还是从
CachedGauge
继承的公共/受保护字段?啊,对不起。。。person服务是外部类中的一个受保护字段,类似于“registry”对象。谢谢,这看起来不错。问题是,CachedGauge是第三方类,我试图不覆盖它。。。但我随后创建了自己的Utils类…@Fritz-没错。这是一个可以放在任何地方的util方法。