“T扩展Junk”在Java中的泛型类中意味着什么?

时间:2012-11-29 19:08:59

标签: java generics

我试图理解这里发生的最新情况Example also below。我想看看是否有人可以提供额外的代码来帮助我理解这一点。如何用T扩展垃圾?这意味着什么?

public class Junk<T extends Junk>
{

    public Junk()
    {

    }

    public T returnType()
    {
        return null; //? what would I even return
    }

    //what would I do to make sense of this class
}

4 个答案:

答案 0 :(得分:2)

请原谅我做出有根据的猜测,但是,

看起来T是未定义的类型,

语句<T extends junk>看起来像一个约束,以确保T来自Junk

所以,如果你有一个像

这样的课程
public class SmallJunk extends Junk
{

}

然后T可以是SmallJunk,但不是其他类型。

答案 1 :(得分:2)

T是泛型类型参数。你知道它是垃圾或它的子类。要从方法中返回任何有用的内容,您需要使用相同类型的其他方法。例如:

public class Junk<T extends Junk> {
    T var;

    public void setT(T var) {
        this.var = var;
    }

    public T returnType(){
        return var;
    }
}

可以通过创建指定了type参数的实例来使用它:

Junk junk = new Junk<Junk>();
junk.setT(new Junk<Junk>());
junk.returnType();

这比简单地使用“Junk”而不是“T”更有用,因为可以使用子类型而不会丢失类型安全性。如果你有一个子类SubclassJunk,那么你可以这样做:

Junk junk = new Junk<SubclassJunk>();
junk.setT(new SubclassJunk<Junk>());
SubclassJunk subclass = junk.returnType();

答案 2 :(得分:1)

class Junk<T extends Junk>是Java中泛型编程的语法。这意味着无论在类中使用类型T,它都必须代表某些(尚未知)的Junk子类。

答案 3 :(得分:1)

鉴于

public class junk<T extends junk<T>>
{

    public T returnType()
    {
        return (T)this;
    }
}

你会把它扩展为

public class Subclass extends junk<Subclass> {
}

然后继承的returnType方法将返回Subclass。标准Java库中此模式的最突出示例是enum类型,其中枚举Foo成为扩展Enum<Foo>的类