0

Java でオプションのソリューションを作成しました。

public final class Optional<T> {

    private final T reference;

    private Optional(T reference) {
         this.reference = reference;
    }

    public T get() {
        if (!isPresent()) {
            throw new IllegalStateException("Cannot retrieve reference when absent!");
        }
        return reference;
    }

    public boolean isPresent() {
        return reference != null;
    }

    public static <T> Optional<T> of(T reference) {
        return new Optional<T>(reference);
    }

    public static <T> Optional<T> absent() {
        return of(null);
    }

    public static <T> Optional<T> fromNullable(@Nullable T nullableReference) {
        return of(nullableReference);
    }

}

しかし、実動コードで使用すると、コンパイラーが文句を言います。

これは私の生産コードです:

public final class OnsetSequencer {

    private final Onset onset;
    private final Optional<EventManager> eventManager;

    public OnsetSequencer(Onset onset, Optional<EventManager> eventManager) {
        this.onset = onset;
        this.eventManager = eventManager;
    }

    public OnsetSequencer(Onset onset) {
        this(onset, Optional.absent());
    }

    public void sequence() {
        boolean present = eventManager.isPresent();
        if (present) {
            eventManager.get().dispatchEvent(new OnsetBeginEvent(onset));
        }
        onset.begin();
        if (present) {
            eventManager.get().dispatchEvent(new OnsetEndEvent(onset));
        }
        onset.end();
    }

}

コンパイラーは次のように不平をthis(onset, Optional.absent());言います:コンストラクター OnsetSequencer(Onset, Optional) は未定義です

に変更して問題を修正しようとしましたthis(onset, Optional<EventManager>.absent()); 。その構文も間違っています。

この問題をどうしようか悩んでいます!

4

2 に答える 2

3

私はあなたが欲しいと思います:

Optional.<EventManager>absent()

私はJavaでジェネリックメソッドの型引数を表現する方法が好きではありませんでしたが、それは人生です。詳細については、JLSのセクション15.12を参照してください。

于 2012-08-17T21:06:57.627 に答える
1

次のものを使用する必要があります。

Optional.<EventManager>absent()
于 2012-08-17T21:12:00.123 に答える