Java 8 个匿名 Lambda Class
Java 8 Lambda for Anonymous Class
我这里有一个棘手的情况,我想从代码的角度进行优化。有没有办法通过 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();
}
});
CachedGauge class 看起来像这样:
public abstract class CachedGauge<T> implements Gauge<T> {
protected CachedGauge(long timeout, TimeUnit timeoutUnit) {
...
}
protected abstract T loadValue();
...
}
}
看看是否有办法真的很棒,这里棘手的部分是有一个默认构造函数并且 class 是参数化的。
最好,周五
registry.register("metric.persons.total",
CachedGauge.of(1,TimeUnit.MINUTES, ()->personService.findAll().size() )
);
而且我认为您可以弄清楚如何实施 CachedGauge.of(long, TimeUnit, Supplier<T>)
为了完成这个线程,我的 Utils class 看起来像这样
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();
}
};
}
}
我这里有一个棘手的情况,我想从代码的角度进行优化。有没有办法通过 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();
}
});
CachedGauge class 看起来像这样:
public abstract class CachedGauge<T> implements Gauge<T> {
protected CachedGauge(long timeout, TimeUnit timeoutUnit) {
...
}
protected abstract T loadValue();
...
}
}
看看是否有办法真的很棒,这里棘手的部分是有一个默认构造函数并且 class 是参数化的。
最好,周五
registry.register("metric.persons.total",
CachedGauge.of(1,TimeUnit.MINUTES, ()->personService.findAll().size() )
);
而且我认为您可以弄清楚如何实施 CachedGauge.of(long, TimeUnit, Supplier<T>)
为了完成这个线程,我的 Utils class 看起来像这样
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();
}
};
}
}