我不喜欢这段代码,但我喜欢它的作用(懒惰地检索一些东西):
private final HugeMatrix storedMatrix;
public HugeMatrix matrix() {
if (this.storedMatrix == null) {
this.storedMatrix = // compute the huge matrix
}
return storedMatrix;
}
我喜欢这段代码,我希望它能做与上面代码相同的事情:
@Lazy
public HugeMatrix matrix() {
return // compute the huge matrix
}
私有(private)字段和检查是样板。是否可以使用类似于 Project Lombok 的工具为每个带注释的方法自动生成它们?有这样的工具吗?无论它是在字节码上运行还是在生成的源上运行都无关紧要,唯一重要的是原始源代码应该易于阅读。
我会自己写一个工具,但我不知道该用什么(我已经为此目的尝试了 AspectJ 和注释处理器;这些东西似乎不适合这项任务,但我对它们的看法可能又是错误的) .
最佳答案
@Lazy HugeMatrix matrix = // compute the huge matrix
如果您不知道 groovy ,它是一种语言,不仅所有 Java 代码都有效(所以您已经可以编写它了!)它还有更简洁的语法可供使用。它编译成 Java 字节码,因此没有额外的运行时要求。如果需要,它也是动态的,IntelliJ 开箱即用地支持它。 .
一般来说,如果你讨厌样板,你会喜欢 groovy!
例如,这是一个 immutable具有 equality contract 的类实现:
@Immutable
class Person {
String first, last
int age
}
就是这样!
注意 @Immutable
给你 @EqualsAndHashCode
但如果你不想不可变,你可以使用 @EqualsAndHashCode
。
用法:
def c1 = new Customer(first:'Tom', last:'Jones', age:21);
def c2 = new Customer("Tom", 'Jones', 21);
assertEquals(c1, c2);
关于java - 有没有办法在编译或源代码处理期间为方法添加惰性评估?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30195875/