1 简介
2 Usage
2.1 泛型类
package com.monkey.java_study.datastructure.generic;
public class GenericClassTest {
private T data;
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
@Override
public String toString() {
return "GenericClassTest{" +
"data=" + data +
'}';
}
}
2.2 泛型接口
2.2.1 接口
package com.monkey.java_study.datastructure.generic;
public interface IGenericInterfaceTest {
T getData();
}
2.2.2 String类型实现
package com.monkey.java_study.datastructure.generic.impl;
import com.monkey.java_study.datastructure.generic.IGenericInterfaceTest;
public class GenericInterfaceTestStringImpl implements IGenericInterfaceTest {
@Override
public String getData() {
return "Generic interface implements!";
}
}
2.2.3 Integer类型实现
package com.monkey.java_study.datastructure.generic.impl;
import com.monkey.java_study.datastructure.generic.IGenericInterfaceTest;
public class GenericInterfaceTestIntegerImpl implements IGenericInterfaceTest {
@Override
public Integer getData() {
return 1;
}
}
2.3 泛型方法
package com.monkey.java_study.datastructure.generic;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class GenericMethodTest {
private static final Logger logger = LogManager.getLogger(GenericMethodTest.class);
public T genericMethod(GenericClassTest genericClassTest) {
T data = genericClassTest.getData();
return data;
}
public T genericMethodDirect(T data) {
return data;
}
public T genericMethodWithTypeLimit(T data) {
return data;
}
public T genericMethodWithTypeLimit1(GenericClassTest extends Number> genericClassTest) {
T data = (T) genericClassTest.getData();
return data;
}
public void genericMethodWithoutReturn(GenericClassTest genericClassTest) {
T data = genericClassTest.getData();
logger.info(">>>>>>>>>泛型方法输出值:{}", data);
}
}
3 小结
4 完整测试样例
package com.monkey.java_study.functiontest;
import com.monkey.java_study.datastructure.generic.GenericClassTest;
import com.monkey.java_study.datastructure.generic.GenericMethodTest;
import com.monkey.java_study.datastructure.generic.impl.GenericInterfaceTestIntegerImpl;
import com.monkey.java_study.datastructure.generic.impl.GenericInterfaceTestStringImpl;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.Test;
public class GenericTest {
private static final Logger logger = LogManager.getLogger(GenericTest.class);
@Test
public void genericClassStringTest() {
GenericClassTest genericClass = new GenericClassTest<>();
genericClass.setData("StringType");
logger.info(">>>>>>>>>>String:{}", genericClass);
}
@Test
public void genericClassIntegerTest() {
GenericClassTest genericClass = new GenericClassTest<>();
genericClass.setData(1);
logger.info(">>>>>>>>>>Integer:{}", genericClass);
}
@Test
public void genericMethod1() {
GenericMethodTest genericMethodTest = new GenericMethodTest();
GenericClassTest genericClassTest = new GenericClassTest<>();
genericClassTest.setData("Generic class 1.");
String data = genericMethodTest.genericMethod(genericClassTest);
logger.info(">>>>>>>>>>data:{}", data);
}
@Test
public void genericMethod2() {
GenericMethodTest genericMethodTest = new GenericMethodTest();
String data = "Generic class 2";
String data1 = genericMethodTest.genericMethodDirect(data);
logger.info(">>>>>>>>>data:{}", data1);
}
@Test
public void genericMethod3() {
GenericMethodTest genericMethodTest = new GenericMethodTest();
// String data = "Generic method 1";
Integer data = 1;
Integer data1 = genericMethodTest.genericMethodWithTypeLimit(data);
logger.info(">>>>>>>>>data:{}", data1);
}
@Test
public void genericMethod4() {
GenericMethodTest genericMethodTest = new GenericMethodTest();
GenericClassTest genericClassTest = new GenericClassTest<>();
genericClassTest.setData(0.01);
Double data1 = genericMethodTest.genericMethodWithTypeLimit1(genericClassTest);
logger.info(">>>>>>>>>data:{}", data1);
}
@Test
public void genericMethod5() {
GenericMethodTest genericMethodTest = new GenericMethodTest();
GenericClassTest genericClassTest = new GenericClassTest<>();
genericClassTest.setData("Generic class 3");
genericMethodTest.genericMethodWithoutReturn(genericClassTest);
}
@Test
public void genericInterface1() {
GenericInterfaceTestStringImpl genericInterfaceTest = new GenericInterfaceTestStringImpl();
String data = genericInterfaceTest.getData();
logger.info(">>>>>>>>>>data:{}", data);
}
@Test
public void genericInterface2() {
GenericInterfaceTestIntegerImpl genericInterfaceTest = new GenericInterfaceTestIntegerImpl();
Integer data = genericInterfaceTest.getData();
logger.info(">>>>>>>>>>data:{}", data);
}
}