“T扩展Junk”在Java中的generics类中意味着什么?
我正在试着理解这里有什么表示法, 例如下面的例子 。 我想看看是否有人可以提供额外的代码来帮助我理解这一点。 如何用T扩展垃圾? 这意味着什么?
public class Junk { public Junk() { } public T returnType() { return null; //? what would I even return } //what would I do to make sense of this class }
T
是generics类型参数。 你知道它是垃圾或它的子类。 要从方法中返回任何有用的内容,您需要使用相同类型的其他方法。 例如:
public class Junk { T var; public void setT(T var) { this.var = var; } public T returnType(){ return var; } }
可以通过创建指定type参数的实例来使用它:
Junk junk = new Junk(); junk.setT(new Junk ()); junk.returnType();
这比简单地使用“Junk”而不是“T”更有用,因为可以使用子类型而不会丢失类型安全性。 如果您有子SubclassJunk
,那么您可以这样做:
Junk junk = new Junk(); junk.setT(new SubclassJunk()); SubclassJunk subclass = junk.returnType();
请原谅我做出有根据的猜测,但是,
看起来T
是未定义的类型,
语句
看起来像一个约束,以确保T
派生自Junk
所以,如果你有类似的课程
public class SmallJunk extends Junk { }
然后T
可以是SmallJunk
,但不是其他类型。
class Junk
是Java中generics编程的语法。 这意味着无论在类中使用何种类型T
,它都必须代表Junk
某些 (尚未知)子类。
特定
public class junk> { public T returnType() { return (T)this; } }
你会把它扩展为
public class Subclass extends junk { }
然后inheritance的returnType
方法将返回Subclass
。 标准Java库中这种模式最突出的例子是enum
类型,其中枚举Foo
成为扩展Enum
你应该阅读这篇文章来理解它: http : //docs.oracle.com/javase/tutorial/java/generics/bounded.html