Java 泛型
相關文章
相關概念
- 所謂泛型類(generic class)就是具有一個或多個類型參數的類。
- 泛型,即“參數化類型”。一提到參數,最熟悉的就是定義方法時有形參,然後調用此方法時傳遞實參。那麼參數化類型怎麼理解呢?顧名思義,就是將類型由原來的具體的類型參數化,類似於方法中的變量參數,此時類型也定義成參數形式(可以稱之爲類型形參),然後在使用/調用時傳入具體的類型(類型實參)。
- 泛型的本質是爲了參數化類型(在不創建新的類型的情況下,通過泛型指定的不同類型來控制形參具體限制的類型)。也就是說在泛型使用過程中,操作的數據類型被指定爲一個參數,這種參數類型可以用在類、接口和方法中,分別被稱爲泛型類、泛型接口、泛型方法。
泛型類
public class MyGenericClass<T> {
private T myClass;
public MyGenericClass(T myClass) {
this.myClass = myClass;
}
public T getMyClass() {
return myClass;
}
public void setMyClass(T myClass) {
this.myClass = myClass;
}
}
public class MyGenericClassTest {
@Test
public void testMyGeneric() {
MyGenericClass<String> myGenericClass = new MyGenericClass<String>("myGenericClass");
Assert.assertEquals("myGenericClass", myGenericClass.getMyClass());
}
}
泛型方法
public class MyGenericMethod {
public <T> T getMes(T str) {
return (T) ("Hello world, " + str);
}
}
public class MyGenericMethodTest {
@Test
public void testMyGenericMethodTest() {
MyGenericMethod method = new MyGenericMethod();
Assert.assertEquals("Hello world, chen", method.getMes("chen"));
}
@Test
public void testMyGenericMethodTest2() {
MyGenericMethod method = new MyGenericMethod();
Assert.assertEquals("Hello world, 1", method.getMes(1));
}
}
泛型接口
public interface IMyGeneric<T, V> {
String show(T t, V v);
}
public class MyGenericImpl implements IMyGeneric<String, String> {
public String show(String s, String s2) {
return s + ", " + s2;
}
}
public class MyGenericImplTest {
@Test
public void testMyGenericImpl() {
MyGenericImpl myGeneric = new MyGenericImpl();
Assert.assertEquals("Hello, world!", myGeneric.show("Hello", "world!"));
}
}