我想知道这种方法是否正确:

public ITask getState()
{
    statePredicate[Some predicate definition];
    ITask nextRunnable = null;
try {
    nextRunnable = Iterables.find((Iterable)queue, statePredicate);
}
    catch (NoSuchElementException e)
    {}
return nextRunnable;
}


我想知道的要点是:


谓词是否应作为类的成员进行缓存?
我什么都不做,我什至不登录,因为它是
我的应用程序找不到任何东西都是正常的。
返回空值,因为我做了最后的返回。


谢谢您的意见 !
--

最佳答案

1)如果谓词始终相同,则将其设为static final类成员。

2)还有一个Iterables.find版本,您可以将默认值指定为(假设您使用的是Google Guava)。然后,您根本不需要处理NoSuchElementException

3)是否有理由将queue强制转换为Iterable?如果没有必要,请不要进行投射。

class MyClass {
    private static final Predicate STATE_PREDICATE = new Predicate<ITask>() {
        @Override
        public boolean apply(ITask input) {
            // ... your code here
        }
    };

    public ITask getState() {
        return Iterables.find(queue, STATE_PREDICATE, null);
    }
}

09-25 21:29