2012-09-29 27 views
2

编写名为MyType的泛型类的标头。该类应该有 有两个类型参数。第一个类型参数的上限 应该是Number类。第二个类型参数的上限 应该是String类。类有两个类型参数都有一个字符串和数字的上限:Java

会看起来像这样正确吗?

public class MyType<T extends Number> {} 

我该如何去获得第二个类型参数作为上限?我可以只扩展Number extends String吗?

回答

3

声明是这样

public class TestThis <T extends Number, X extends String> {} 

x延伸字符串作品,请记住,String是一个final类,你不能对它进行扩展。 Eclipse给了我这个警告:

类型参数X不应该被最终类型String限制。最终类型不能进一步扩展

1

您误解了问题:它要求您为类提供两个类型参数,每个参数都带有一个边界,而不是一个带有两个边界的类型参数。

例如这个类有两个类型参数TU

public class MyType<T, U> { } 

我把它留给你 其他答案添加的范围。


编辑:请注意,如果你想在单一类型参数的多个上限,您可以使用&分隔它们:

<T extends B1 & B2 & B3> 

但由于Java没有多重继承,附加上限只能是接口。这里,B1可以是类或接口,而B2B3必须是接口(参考:Java Tutorials)。

1

我该如何去获取第二个类型参数作为上限?我可以只扩展Number extends String吗?

您可以通过添加像,分开的第二个参数:

public class MyType<T extends Number, S extends String> { 
} 

虽然它看起来奇怪,因为String是一个final类,但你仍然可以扩展它的上限。

声明看起来像:

MyType<Long,String> myType = new MyType<Long, String>(); 
+0

在这种情况下,'S扩展String'与'String'有什么不同? –

+0

不是。从技术上讲,我宁愿'String'而不是'S extends String' – SiB

1

如果A上限的B,这意味着A extends B。因此,您的声明应该是这样的:

public class MyType<T extends Number, U extends String> { 
    ... 
} 

你被要求有两种类型参数(不只是一个如您目前拥有),因此TU以上。 但我应该注意:Stringfinal,因此没有类型U可以是String的扩展(尽管U仍然可以是String)。

相关问题