이 기사의 내용은 Java의 제네릭이 무엇인지에 관한 것입니다. Java 제네릭에 대한 자세한 소개는 특정 참고 가치가 있습니다. 도움이 필요한 친구가 참고할 수 있기를 바랍니다.
1. 제네릭이란 무엇입니까?
Java 제네릭 설계 원칙: 컴파일 중에 경고가 없으면 런타임 중에 ClassCastException 예외가 발생하지 않습니다.
Generics: 객체를 생성하거나 메서드를 호출할 때까지 유형 설명 작업을 연기합니다. 특수 유형
매개변수화된 유형: ArrayList
Integer를 실제 유형 매개변수라고 합니다.
전체를 ArrayList
//创建集合对象 ArrayList<String> list = new ArrayList<>(); list.add("hello"); list.add("world"); list.add("java"); //遍历,由于明确了类型.我们可以增强for for (String s : list) { System.out.println(s); }3. 제네릭 기본
제네릭 클래스는 클래스에 제네릭 유형을 정의하는 것입니다. 사용자가 클래스를 사용할 때 유형이 명확해집니다. 이 경우 사용자는 클래스가 어떤 유형을 나타내는지 지정합니다. .. 사용자는 사용시 강제 전송이나 런타임 변환 예외에 대해 걱정할 필요가 없습니다.
클래스에 정의된 제네릭은 클래스 메서드에서도 사용할 수 있습니다!
/* 1:把泛型定义在类上 2:类型变量定义在类上,方法中也可以使用 */ public class ObjectTool<T> { private T obj; public T getObj() { return obj; } public void setObj(T obj) { this.obj = obj; } }사용자가 어떤 유형을 사용하고 싶은지, 생성 시 유형을 지정하면 됩니다. 사용하면 클래스가 사용자가 사용하려는 유형으로 자동 변환됩니다. public static void main(String[] args) {
//创建对象并指定元素类型 ObjectTool<String> tool = new ObjectTool<>(); tool.setObj(new String("钟福成")); String s = tool.getObj(); System.out.println(s); //创建对象并指定元素类型 ObjectTool<Integer> objectTool = new ObjectTool<>(); /** * 如果我在这个对象里传入的是String类型的,它在编译时期就通过不了了. */ objectTool.setObj(10); int i = objectTool.getObj(); System.out.println(i);}제네릭 메서드 정의... 제네릭이 먼저 정의된 다음 사용됩니다
//定义泛型方法.. public <T> void show(T t) { System.out.println(t); }사용자가 전달하는 유형, 반환 값은 어떤 유형이 됩니다
public static void main(String[] args) { //创建对象 ObjectTool tool = new ObjectTool(); //调用方法,传入的参数是什么类型,返回值就是什么类型 tool.show("hello"); tool.show(12); tool.show(12.5); }서브클래스는 제네릭 클래스의 타입 매개변수 변수를 명시합니다
/* 把泛型定义在接口上 */ public interface Inter<T> { public abstract void show(T t); }제네릭 인터페이스를 구현하는 클래스...
/** * 子类明确泛型类的类型参数变量: */ public class InterImpl implements Inter<String> { @Override public void show(String s) { System.out.println(s); } }IV. 제네릭의 적용
웹 페이지를 작성할 때 여러 DAO가 있는 경우가 많습니다. 매번 여러 개의 DAO를 작성하는 것은 약간 번거롭습니다.
public abstract class BaseDao<T> { //模拟hibernate.... private Session session; private Class clazz; //哪个子类调的这个方法,得到的class就是子类处理的类型(非常重要) public BaseDao(){ Class clazz = this.getClass(); //拿到的是子类 ParameterizedType pt = (ParameterizedType) clazz.getGenericSuperclass(); //BaseDao<Category> clazz = (Class) pt.getActualTypeArguments()[0]; System.out.println(clazz); } public void add(T t){ session.save(t); } public T find(String id){ return (T) session.get(clazz, id); } public void update(T t){ session.update(t); } public void delete(String id){ T t = (T) session.get(clazz, id); session.delete(t); } }
추상 DAO를 상속하며 구현 클래스에는 추가, 삭제, 수정 및 확인에 해당하는 메서드가 있습니다.
rreee
위 내용은 Java의 제네릭이란 무엇입니까? Java 제네릭에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!