java - 如何引用泛型参数自身的参数,比如T2<T>中的T?

标签 java generics inheritance

考虑以下界面:

class SomeParamClass<T> {
    public T getT() {return null;}
}
class GetThing<T, TSomeImpl extends SomeParamClass<T>> {
    TSomeImpl thingcreator;
    GetThing(TSomeImpl thingcreator) {
        this.thingcreator = thingcreator;
    }
    T getThing() {
        return thingcreator.get(offset);
    }
    TSomeImpl getOrigClass() {
        return thingcreator;
    }
}

这只是我已经遇到过几次的问题的示例。

在此示例中,输入 T直接绑定(bind)到参数TSomeImpl 。如果你像这样创建它:

new GetThing<String,TSomeImpl<String>>(new TSomeImpl<String>())

参数String被不必要地重复。它是冗余,但 Java 在这种情况下似乎需要它。

有没有办法使用泛型参数内部参数作为类型?

我编写了这个语法,有没有真正适用于此的语法?

// Pseudocode on refering to generic parameter's parameters
class GetThing<TSomeImpl extends SomeParamClass<T>, TSomeImpl::<T>> {
    TSomeImpl thingcreator;
    GetThing(TSomeImpl thingcreator) {
        this.thingcreator = thingcreator;
    }
    TSomeImpl::<T> getThing() {
        return thingcreator.get(offset);
    }
    TSomeImpl getOrigClass() {
        return thingcreator;
    }
}

这将比使用一样:

GetThing<TSomeImpl<String>>

不需要其他参数。

澄清一下:如何重写原始类,使其只有一个泛型参数 List<T>T参数是推断出来的,因为它是从 List<T> 中明确得知的。 .

最佳答案

这个怎么样

interface SomeType<T> {
    T getT();
}

class SomeParamClass<T> implements SomeType<T> {
    public T getT() {return null;}
}

class GetThing<T> {
    SomeType<T> thingcreator;
    GetThing(SomeType<T> thingcreator) {
        this.thingcreator = thingcreator;
    }
    T getThing() {
        return thingcreator.getT();
    }
    SomeType<T> getOrigClass() {
        return thingcreator;
    }
}

你可以像这样使用它

new GetThing<String>(new SomeParamClass<>());

关于java - 如何引用泛型参数自身的参数,比如T2<T>中的T?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53653162/

相关文章:

java - Android - Viewmodel 变大

c# - 将泛型类型参数转换为 C# 中的特定类型

c++ - 从同一文件构造基类和继承类

c# - 如何创建一个灵活的架构,使我能够在多个不同的底层数据模型上运行?

generics - 快速泛型的段错误

javascript - 自定义对象上的 jQuery val() 方法

c# - 如果子类调用覆盖成员,则阻止/生成警告

java - 我的 NullPointerException 的原因是什么?

Java Applet 使用 Paint 方法时遇到的问题

java - 添加索引到 jar 文件,引用外部 jar 文件