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