1

我试图理解这里发生的事情的这种表示法示例也在下面。我正在寻找是否有人可以提供额外的代码来帮助我理解这一点。如何用 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

4 回答 4

2

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

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

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

所以如果你有一个像

public class SmallJunk extends Junk
{

}

thenT可以是 a SmallJunk,但不能是其他类型。

于 2012-11-29T19:11:02.337 回答
2

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

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

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

    public T returnType(){
        return var;
    }
}

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

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

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

Junk junk = new Junk<SubclassJunk>();
junk.setT(new SubclassJunk<Junk>());
SubclassJunk subclass = junk.returnType();
于 2012-11-29T19:16:44.510 回答
1

class Junk<T extends Junk>是 Java 中泛型编程的语法。这意味着在类中使用该类型的任何地方,T都必须代表.Junk

于 2012-11-29T19:12:17.920 回答
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>

于 2012-11-29T19:13:19.870 回答