注册观察员的最佳选择是什么?我没有找到关于这个主题的任何内容。主要讨论了“推与拉”,但也有几个选项可以注册观察者。
public static void main(String[] args)
{
Subject subject = new ConcreteSubject();
// External registration
Observer observerExternal = new ConcreteObserverExternal();
subject.registerObserver(observerExternal);
// Internal registration, option 1
Observer observerInternal1 = new ConcreteObserverInternal1(subject);
// Internal registration, option 2
ConcreteObserverInternal2 observerInternal2 = new ConcreteObserverInternal2(subject);
}
interface Observer
{
void inform();
}
class ConcreteObserverExternal implements Observer
{
@Override
public void inform()
{
// do sth.
}
}
class ConcreteObserverInternal1 implements Observer
{
public ConcreteObserverInternal1(Subject subject)
{
subject.registerObserver(this);
}
@Override
public void inform()
{
// …Run Code Online (Sandbox Code Playgroud) 为什么?:在Java 8 lambda表达式中使用运算符时会抛出异常?
当我尝试运行以下示例代码时:
import java.util.ArrayList;
import java.util.List;
public class TestClass
{
public static void main(String[] args)
{
List<Foo> foos = new ArrayList<>();
boolean b = true;
foos.forEach(foo -> (b ? foo.doSth(1) : foo.doSth(2)));
}
@FunctionalInterface
interface Foo
{
public void doSth(int i);
}
}
Run Code Online (Sandbox Code Playgroud)
我得到以下异常:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
at gui.marksDetection.view.TestClass.main(TestClass.java:8)
Run Code Online (Sandbox Code Playgroud)
当用for-each-loop替换lambda表达式,或者用(b ? foo.doSth(1) : foo.doSth(2))if-else-block 替换时,一切正常,所以组合似乎有问题?: + lambda.但是,Eclipse不会将其标记为错误.