鉴于
public interface StubTransformer {
AbstractStub<?> transform(String name, AbstractStub<?> stub);
}
和
public static <T extends AbstractStub<T>> T attachHeaders(T stub, Metadata extraHeaders) {...}
这个Kotlin类无法编译。
class MetadataInjectingStubTransformer: StubTransformer {
override fun transform(name: String, stub: AbstractStub<*>): AbstractStub<*> {
val header = Metadata()
return MetadataUtils.attachHeaders(stub, header)
}
}
错误
Type parameter bound for T in
fun <T : AbstractStub<T!>!> attachHeaders(stub: T!, extraHeaders: Metadata!): T!
is not satisfied: inferred type AbstractStub<*>! is not a subtype of AbstractStub<AbstractStub<*>!>!
但是Java版本可能会被迫编译。
public class MetadataInjectingStubTransformer implements StubTransformer {
@Override
@SuppressWarnings("unchecked")
public AbstractStub<?> transform(String name, AbstractStub stub) {
Metadata header = new Metadata();
return MetadataUtils.attachHeaders(stub, header);
}
}
我们如何编译Kotlin代码?