如何使Java上界通配符类型参数符合Kotlin?

如何使Java上界通配符类型参数符合Kotlin?,java,kotlin,generics,Java,Kotlin,Generics,给定 公共接口转换器{ AbstractStub转换(字符串名称,AbstractStub); } 及 publicstatict附加头(T存根,元数据外部头){…} 此Kotlin类无法编译 public static <T extends AbstractStub<T>> T attachHeaders(T stub, Metadata extraHeaders) {...} Type parameter bound for T in fun <T :

给定

公共接口转换器{
AbstractStub转换(字符串名称,AbstractStub);
}

publicstatict附加头(T存根,元数据外部头){…}
此Kotlin类无法编译

public static <T extends AbstractStub<T>> T attachHeaders(T stub, Metadata extraHeaders) {...}
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<*>!>!
类MetadataInjectingStubTransformer:StubTransformer{
重写有趣的转换(名称:String,存根:AbstractStub):AbstractStub{
val头=元数据()
返回MetadataUtils.attachHeaders(存根,头)
}
}
错误

为中的T绑定的类型参数
有趣的附加标题(stub:T!,extraHeaders:Metadata!):T!
不满足:推断类型AbstractStub!不是AbstractStub的子类型!
但是Java版本可以被强制编译

public static <T extends AbstractStub<T>> T attachHeaders(T stub, Metadata extraHeaders) {...}
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<*>!>!
公共类MetadataInjectingStubTransformer实现StubTransformer{
@凌驾
@抑制警告(“未选中”)
公共抽象存根转换(字符串名称,抽象存根){
元数据头=新元数据();
返回MetadataUtils.attachHeaders(存根,头);
}
}

我们如何使Kotlin代码编译?

内部是什么
AbstractStub
?@AnggrayudiH不确定“内部”是什么意思,但您可以自己查看Javadoc。这并不重要,因为问题不在于
AbstractStub
。相关:您的问题和链接的问题都是关于确认Kotlin中的Java通配符类型。它们是相关的。指出相关问题很有用。对泰国黄咖喱和这个网站有什么问题发表无关紧要的评论是没有用的。我不知道答案,因此我没有回答,但我想知道答案,并认为这是一个好问题,因此我投了赞成票,认为这与另一个问题有关,因此我发布了链接。@AdamMillerchip是的,但正如你自己指出的,另一个问题中被接受的答案使用了
Nothing
,不能归还任何东西。这里不是这样。另一个问题实际上是我问题的特例,而不是相反。我还看到了一个接近票数的投票,我认为这是从你的评论中产生的(因为你指出它们是类似的问题)。里面是什么。这并不重要,因为问题不在于
AbstractStub
。相关:您的问题和链接的问题都是关于确认Kotlin中的Java通配符类型。它们是相关的。指出相关问题很有用。对泰国黄咖喱和这个网站有什么问题发表无关紧要的评论是没有用的。我不知道答案,因此我没有回答,但我想知道答案,并认为这是一个好问题,因此我投了赞成票,认为这与另一个问题有关,因此我发布了链接。@AdamMillerchip是的,但正如你自己指出的,另一个问题中被接受的答案使用了
Nothing
,不能归还任何东西。这里不是这样。另一个问题实际上是我问题的特例,而不是相反。我还看到了一个接近票数的投票,我认为这是从你的评论中产生的(因为你表示他们是类似的问题)。
public class MetadataInjectingStubTransformer implements StubTransformer {
    @Override
    @SuppressWarnings("unchecked")
    public AbstractStub<?> transform(String name, AbstractStub stub) {
        Metadata header = new Metadata();    
        return MetadataUtils.attachHeaders(stub, header);
    }
}