2015-09-25 75 views
3

我没有一个实际的问题,我只是玩弄Java泛型,我意识到如果我用泛型创建一个类,我可以使用任何名称作为泛型部分的类所以在<>内),它将被视为一个不存在的类,作为一个变量。Java泛型与现有类

因此,如果我使用String作为通用部分,它不会再是String,因此例如您不能使用它的charAt()方法。

我想,这是一个功能,因为通常情况下,如果我知道我想要使用String比我简单地使用它,并且我不创建泛型类。

我对不对?

+0

java中名字的含义高度依赖于上下文。在相同的.java文件中,可以使用相同的名称来表示不同的内容。例如请参阅http://stackoverflow.com/q/17690135/2158288 – ZhongYu

+2

您可以限制泛型类型参数以扩展现有类型,在这种情况下,您可以使用该类型的方法。你是这个意思吗? –

+1

这是因为<>之间的名称只是一个名称 - 一个类型变量的名称。就像你可以给定一个类的同名变量一样。这样做不是个好主意,因为它很混乱。 – Jesper

回答

4

如果您使用全名(包括包裹),则仍然可以使用任何具有相同名称的类。 java.lang.String

问题实际上与您在包中创建名为String的类相同。你可以做到这一点,但是你也需要承担相同包中的类将使用这个类而不是标准的String类的后果。

+1

'java.lang.String'的含义也很模糊:)它也可能意味着变量访问,例如 – ZhongYu

+1

@bayou。io是的,创建一个无法通过简单或合格名称访问某些内容的示例相对比较容易。 – biziclop

1

通用允许我们使用不同类型的单个实现。

例如,考虑来自java的collection frameworkList<T>是一种通用类型,您可以在java中创建任何类型的List。它为您提供了不同的有用操作,您可以在不同的类型(如原始类型的包装类)上执行这些操作。

如果您为自定义类型使用泛型,那么您可能需要指定某些实现来支持泛型功能。 您仍然可以使用类型的一般行为

List<String> list = new ArrayList<String>(); 

这是一个表格类型String的列表。您可以像明智一样创建任何List。现在,您可以轻松使用由java提供的许多功能。现在,如果您需要Integer的相同功能,那么您需要重新编写相同的功能。