【发布时间】:2014-07-12 11:31:26
【问题描述】:
我正在做一个项目,我需要在对象属性和 [booleans|integers|float...] 上表示条件语句,因为我需要存储这些条件的结果(无论它们是真还是假)这样我以后就不用再去检查了(条件很多,其实是优化)。
class Foo {
public String getThing() {
return this.thing;
}
private String thing;
public int getBob() {
return this.bob;
}
private int bob;
}
class Bar {
public String getStuff() {
return this.stuff
}
private String stuff;
}
Foo foo = new Foo();
Bar bar = new Bar();
这里我想存储foo.thing != bar.stuff 的条件和foo.bob < 3 的条件。我希望能够存储所有 4 个主要操作 <, >, ==, !=(比较的对象将实现 Java 的 Comparable 接口)。
我想我可以将条件语句存储在一个
Triplet<getAttr1(), Operator.[Equal|GreaterThan...], getAttr2()
(带有评估函数,其中Operator 是我会定义的类)
属性可以存储为函数,因为属性的值总是由它的 getter 给出。事情是我也想和其他类型比较,比如boolean, int, float...
如何表示这些条件语句?
【问题讨论】:
-
这闻起来有点像XY problem。你为什么要这样做?
-
还有,过早的优化。
-
@MikkelLøkke:这正是我对“做决定的人”所说的话。可悲的是,他没有在听。
-
@Duncan:是的,我知道。实际上我看不出他们要求我做什么的兴趣。
-
通过分析器运行它。 Yourkit 真的很棒,它会告诉你性能瓶颈到底在哪里。我可以绝对肯定地告诉你,需要时间的不是布尔表达式的求值。那就是问题不是
if(a>b)这行,而是它可能正在计算a或b(或两者),花时间优化它会更好(特别是如果它也用于代码中的其他地方),而不是尝试推出自己的方法缓存机制。如果您真的必须这样做,那么表达式答案就是前进的方向。
标签: java conditional-statements