说我有这些课程:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9aa56948cdf6 analytics-etl_webserver "/bin/sh -c 'tail -f…" 4 minutes ago Up 4 minutes 0.0.0.0:8080->8080/tcp data-webserver
20db5fd63ad8 postgres:latest "docker-entrypoint.s…" 4 hours ago Up 33 minutes 0.0.0.0:5432->5432/tcp data-postgres
为什么interface Field<T> {}
interface Function<T> extends Field<T> {}
interface UnaryFunction<INPUT, OUTPUT> extends Function<OUTPUT> {}
class UnaryFunctionImpl<INPUT, OUTPUT> implements UnaryFunction<INPUT, OUTPUT> {
public Function<INPUT> asField() {
return (Function<INPUT>) this;
}
}
需要强制转换?从理论上讲这是不合理的,还是编译器不够聪明?
答案 0 :(得分:3)
答案是否定的。由于Function<INPUT>
和Function<OUTPUT>
是不同的类型,因此您必须告诉编译器您对自己的行为负责。
答案 1 :(得分:1)
UniaryFunction<INPUT, OUTPUT>
是Function<OUTPUT>
,但不是是Function<INPUT>
,因此强制转换是错误的,除非INPUT和OUTPUT是相同类型。
如果输入和输出类型相同,则代码为:
class UnaryFunction<T, T> extends Function<T> {
public Function<T> asSupertype() {
return this;
}
}
...使得演员表和asSupertype()
过时。