【发布时间】:2017-10-01 11:48:48
【问题描述】:
有时,当源代码变得复杂时,我会发现阅读以下语句会让人感到困惑:
Set<Integer> odds = new HashSet<>(ints); // not yet true
odds.removeAll(evens); // now it's true
我想知道是否有一种巧妙的方法可以避免 odds 包含偶数值的行。类似的东西:
(Set<Integer> odds = new HashSet<>(ints)).removeAll(evens); // doesn't compile
我可以使用双括号初始化,
Set<Integer> odds = new HashSet<Integer>(ints) {{ removeAll(evens); }};
但这显然很糟糕for multiple reasons。
这是另一个可以编译的 example hack,但它看起来更像是一个笑话:
Set<Integer> odds = (odds = new HashSet<>(ints)).retainAll(evens) ? odds : odds
我想到的最后一个(在写这篇文章时)似乎没问题,尽管它使用了两行:
Set<Integer> odds;
(odds = new HashSet<Integer>(ints)).removeAll(evens);
还有其他想法吗?
【问题讨论】:
-
Set<Integer> odds = (new HashSet<>(ints)).removeAll(evens);不工作吗? -
@Berger 不,
removeAll无效。 -
我看到这被描述为“时间耦合”
标签: java