Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何声明方法的泛型类型?_Java_Generics - Fatal编程技术网

Java 如何声明方法的泛型类型?

Java 如何声明方法的泛型类型?,java,generics,Java,Generics,我已经用Java为optionals创建了一个解决方案 public final class Optional<T> { private final T reference; private Optional(T reference) { this.reference = reference; } public T get() { if (!isPresent()) { throw new

我已经用Java为optionals创建了一个解决方案

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);
    }

}
公共最终类可选{
私人最终T参考;
专用可选(T参考){
this.reference=参考;
}
公共部门得不到{
如果(!isPresent()){
抛出新的IllegalStateException(“不存在时无法检索引用!”);
}
返回参考;
}
公共布尔值isPresent(){
返回引用!=null;
}
公共静态可选(T参考){
返回新的可选(参考);
}
公共静态可选缺席(){
返回(空);
}
公共静态可选fromNullable(@Nullable T 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();
    }

}
公共最终类OnsetSequencer{
私人最终发病;
私人最终可选事件管理器;
公共OnsetSequencer(开始,可选eventManager){
这个。起病=起病;
this.eventManager=eventManager;
}
公共OnsetSequencer(开始){
这个(开始,可选。缺席());
}
公共无效序列(){
布尔值present=eventManager.isPresent();
如果(出席){
eventManager.get().dispatchEvent(新的OnsetBeginEvent(开始));
}
start.begin();
如果(出席){
eventManager.get().dispatchEvent(新的OnsetEndEvent(开始));
}
起止点();
}
}
编译器在
处抱怨此问题(开始,可选。缺席())说明:构造函数OnsetSequencer(开始,可选)未定义

我已尝试通过将其更改为
this(start,可选的.缺席())来修复该问题
这种语法也是错误的

我想知道如何解决这个问题

我想你想要:

Optional.<EventManager>absent()
可选。缺席()
我从来都不喜欢在Java中表达泛型方法的类型参数,但这就是生活。有关详细信息,请参阅。

我想您需要:

Optional.<EventManager>absent()
可选。缺席()
我从来都不喜欢在Java中表达泛型方法的类型参数,但这就是生活。有关详细信息,请参阅。

您应该使用:

Optional.<EventManager>absent()
可选。缺席()
您应该使用:

Optional.<EventManager>absent()
可选。缺席()

是的!这正是我想要的!谢谢:-)是的!这正是我想要的!谢谢:-)