我试图理解这里发生的最新情况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
}
答案 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>
的类