我目前刚接触Java。到目前为止,我已经能够从JavaScript和PHP的知识中轻松使用基本的Classes
,Functions
,Arrays
等。
但是,我以前从未见过的是:<>
。其中包含某种类型的变量。因为我不知道它叫什么,我找不到任何答案。
我见过这样的话:
List<String> myList = new ArrayList<String>();
但也喜欢:
public static <T> boolean contains( final T[] array, final T v ) {
for ( final T e : array )
if ( e == v || v != null && v.equals( e ) )
return true;
return false;
}
<String>
是什么意思?
在函数中,我还想知道T
答案 0 :(得分:5)
这适用于Generic type
它允许你做的是传递一个类型,并使它对多种对象类型有用
因此List是一个通用集合,它允许您创建任何对象的列表。使List<String>
使对象成为字符串列表。或者您可以使用List<MyClassType>
,它会列出您班级的对象
答案 1 :(得分:2)
定义集合可以容纳的对象的Type
所以当你写List<String> myList = new ArrayList<String>();
时,就意味着
创建一个可以容纳String对象的arrayList。
SomeParameterizedClass { T someValue; }
表示您可以将类型传递给班级,例如SomeParameterizedClass<String>
someValue
,String
类型为List<T> list = new ArrayList<T>();
当您编写List<String> list = new ArrayList<>();
时,此处T可以是任何类型。
使用java 7,您只需说<>
即可。它具有相同的含义。
在java 7中{{1}}被称为菱形运算符
答案 2 :(得分:0)
你会发现&lt; &GT;在下列情况下,T是普通英语的“参数类型”,这意味着您可以用任何其他非基本类型(如String
或Integer
)“替换”该T:
当您声明参数化类型时:
class MyParameterizedClass<T> {
public T myValue;
}
当您声明参数化类型的变量时:
MyParameterizedClass<String> myStringParam;
MyParameterizedClass<Integer> myIntegerParam;
使用参数化类型的构造函数时:
MyParameterizedClass<String> myStringParam = new MyParameterizedClass<String>();
MyParameterizedClass<Integer> myIntegerParam = new MyParameterizedClass<Integer>();
myStringParam.myValue = "Hello world";
myIntegerParam.myValue = 5;
声明泛型方法时:
public <T> T updateMyValue(T myValue) {
this.myValue = myValue
}
答案 3 :(得分:0)
您观察到的部分正确!在Java中,在&lt;&gt;内应该是'Object'类型或'Object'的任何子类类型。
当你声明myList如下:
List<String> myList = new ArrayList<String>()
,它确保声明和初始化的myList只包含String类型的元素。这称为类型声明。
public static <T> boolean contains( final T[] array, final T v ) { }
,是一个泛型方法声明,暗示传递的两个参数应该是相同的对象类型,第一个参数是数组,第二个参数是一个对象。方法返回类型也应该是同一类型。
有关泛型的更多示例,请参阅Java文档。 http://docs.oracle.com/javase/tutorial/extra/generics/methods.html