Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.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_Java 8_Functional Interface - Fatal编程技术网

Java 如何将非泛型接口扩展为泛型接口?

Java 如何将非泛型接口扩展为泛型接口?,java,generics,java-8,functional-interface,Java,Generics,Java 8,Functional Interface,我试着延伸,这样一个看起来 public interface TypedTemporalAdjuster您不能覆盖具有更严格参数的方法,即T adjustInto(T temporal)不覆盖时间调整(时间)作为参数类型T比Temporal更具限制性。现在有两种方法的名称是adjustInto,但是由于类型擦除,参数类型在字节码级别是相同的,因为T扩展了时态和可比性。我认为一个新的接口就是解决这个问题的方法,就像你做的那样。你可以使返回类型更具体,但是,如果使参数类型更具体,那么就不再重写该方法

我试着延伸,这样一个看起来


public interface TypedTemporalAdjuster您不能覆盖具有更严格参数的方法,即
T adjustInto(T temporal)不覆盖时间调整(时间)
作为参数类型
T
Temporal
更具限制性。现在有两种方法的名称是
adjustInto
,但是由于类型擦除,参数类型在字节码级别是相同的,因为
T扩展了时态和可比性。我认为一个新的接口就是解决这个问题的方法,就像你做的那样。你可以使返回类型更具体,但是,如果使参数类型更具体,那么就不再重写该方法。也可以考虑重写继承的方法,然后添加一个新的抽象方法:默认委托:<代码> @重写默认时间调整(时间-时间){返回调整2((t)时间);} t调整为2(t时态);<代码>。这仍然是一个功能接口。
public interface TypedTemporalAdjuster<T extends Comparable<? super T> & Temporal>
extends TemporalAdjuster {
    T adjustInto(T temporal);
}
public interface TypedTemporalAdjuster<T extends Temporal & Comparable<? super T>>
extends TemporalAdjuster {

    static <T extends Temporal & Comparable<? super T>> TypedTemporalAdjuster<T> of(
            final Class<T> temporalClass, final TemporalAdjuster temporalAdjuster) {
        return temporal -> temporalClass.cast(temporalAdjuster.adjustInto(temporal));
    }

    @Override T adjustInto(Temporal temporal);
}
TemporalAdjuster a = TemporalAdjusters.lastDayOfMonth();

LocalDate     date1     = LocalDate.now(),     date2     = date1.with(a);
LocalDateTime dateTime1 = LocalDateTime.now(), dateTime2 = dateTime1.with(a);
ZonedDateTime zoned1    = ZonedDateTime.now(), zoned2    = zoned1.with(a);
TemporalAdjuster a = TemporalAdjusters.ofDateAdjuster(date -> date.plusDays(1));

ZonedDateTime zoned1 = ZonedDateTime.now(), zoned2 = zoned1.with(a);