리플렉션과 결합된 함수 제네릭은 유연하고 확장 가능한 코드를 만듭니다. 기능적 제네릭은 매개변수화된 유형을 지원하는 반면, 리플렉션을 통해 클래스 및 필드에 대한 메타데이터를 검색할 수 있습니다. 두 가지를 결합하면 다양한 유형의 매개변수를 허용하는 일반 함수를 만들 수 있습니다. 유형이 런타임에 결정되더라도 리플렉션을 사용하여 클래스 및 필드 정보를 얻습니다. 유형별 코드를 작성하지 않고도 다양한 객체 유형에 대한 유연한 기능을 만들 수 있습니다.
리플렉션과 결합된 Java 함수 제네릭
Java 제네릭을 사용하면 매개변수화된 유형을 생성하여 런타임 시 유형을 지정할 수 있습니다. Reflection을 사용하면 클래스, 메서드 및 필드에 대한 메타데이터를 검색할 수 있습니다. 이 두 가지 강력한 기능을 결합하면 유연하고 확장 가능한 코드를 만들 수 있습니다.
Function generics를 사용하면 다양한 유형의 매개변수를 허용하는 함수를 정의할 수 있습니다. 예를 들어, 특정 유형을 선언하지 않고 두 요소를 바꾸는 일반 함수를 만들 수 있습니다.
<T> void swap(T a, T b) { T temp = a; a = b; b = temp; }
Reflection을 사용하면 클래스, 메서드 및 필드에 대한 런타임 정보에 액세스할 수 있습니다. 리플렉션을 사용하여 다음을 수행할 수 있습니다.
함수 제네릭과 리플렉션을 결합하면 다양한 개체 유형에 대해 유연하고 확장 가능한 코드를 만들 수 있습니다. 예를 들어, 유형에 관계없이 객체 값을 문자열로 변환하는 일반 함수를 만들 수 있습니다:
import java.lang.reflect.Field; public class ObjectToStringConverter { public static <T> String convertToString(T object) { StringBuilder sb = new StringBuilder(); Class<?> clazz = object.getClass(); // 获取所有字段 Field[] fields = clazz.getDeclaredFields(); // 遍历所有字段并追加其名称和值 for (Field field : fields) { try { field.setAccessible(true); sb.append(field.getName()).append(": ").append(field.get(object)).append("\n"); } catch (IllegalAccessException e) { e.printStackTrace(); } } return sb.toString(); } }
실제 예:
유형별 코드를 작성하지 않고도 다양한 객체 유형에 이 함수를 사용할 수 있습니다:
// 创建一个 Person 类 class Person { private String name; private int age; // ... 构造函数和 getter/setter ... } // 创建一个 Book 类 class Book { private String title; private String author; // ... 构造函数和 getter/setter ... } // 测试 convertToString 函数 Person person = new Person("John", 30); Book book = new Book("Java Programming", "Author"); System.out.println(ObjectToStringConverter.convertToString(person)); System.out.println(ObjectToStringConverter.convertToString(book));
출력:
name: John age: 30 title: Java Programming author: Author
위 내용은 Java 함수 제네릭과 리플렉션의 조합의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!