Получение информации о полях.
Поле класса — это переменная, объявленная внутри класса. Оно может быть статическим или нестатическим, публичным, приватным или защищенным. Reflection API позволяет получать информацию о полях класса, включая их типы, модификаторы и значения.
Получение полей класса
getFields()
Возвращает массив всех публичных полей класса, включая унаследованные от суперклассов.
Пример:
getDeclaredFields()
Возвращает массив всех полей, объявленных в классе, включая приватные и защищенные, но не включает унаследованные поля.
Пример:
Работа с модификаторами полей
getModifiers()
Возвращает модификаторы поля в виде целого числа. Для расшифровки используется класс Modifier.
Пример:
getType()
Возвращает тип поля в виде объекта Class.
Пример:
#Java #Training #Medium #Reflection_API #Field
Поле класса — это переменная, объявленная внутри класса. Оно может быть статическим или нестатическим, публичным, приватным или защищенным. Reflection API позволяет получать информацию о полях класса, включая их типы, модификаторы и значения.
Получение полей класса
getFields()
Возвращает массив всех публичных полей класса, включая унаследованные от суперклассов.
Пример:
import java.lang.reflect.Field;
class Parent {
public String parentField = "Parent Field";
}
class Child extends Parent {
public String childField = "Child Field";
private int privateField = 42;
}
public class Main {
public static void main(String[] args) {
Class<?> clazz = Child.class;
Field[] fields = clazz.getFields();
for (Field field : fields) {
System.out.println("Field: " + field.getName()); // Вывод: parentField, childField
}
}
}
getDeclaredFields()
Возвращает массив всех полей, объявленных в классе, включая приватные и защищенные, но не включает унаследованные поля.
Пример:
Field[] declaredFields = clazz.getDeclaredFields();
for (Field field : declaredFields) {
System.out.println("Declared Field: " + field.getName()); // Вывод: childField, privateField
}
Работа с модификаторами полей
getModifiers()
Возвращает модификаторы поля в виде целого числа. Для расшифровки используется класс Modifier.
Пример:
Field privateField = clazz.getDeclaredField("privateField");
int modifiers = privateField.getModifiers();
System.out.println("Is Private: " + Modifier.isPrivate(modifiers)); // Вывод: true
System.out.println("Is Static: " + Modifier.isStatic(modifiers)); // Вывод: false
getType()
Возвращает тип поля в виде объекта Class.
Пример:
Class<?> fieldType = privateField.getType();
System.out.println("Field Type: " + fieldType.getName()); // Вывод: int
#Java #Training #Medium #Reflection_API #Field
Что выведет код?
#Tasks
public class Task060225 {
public static void main(String[] args) {
String s = "hello";
String sub = s.substring(1, 3);
System.out.println(sub);
}
}
#Tasks
Please open Telegram to view this post
VIEW IN TELEGRAM
Вопросы с собеседования 👩💻
Что такое immutable объект в Java?
Что такое immutable объект в Java?
Anonymous Quiz
83%
Объект, состояние которого нельзя изменить после создания.
7%
Объект, который может изменять свое состояние.
7%
Объект, который автоматически удаляется сборщиком мусора.
4%
Объект, который может быть переопределен.
Получение информации о полях. Часть 2
Пример получения информации о полях
Рассмотрим более сложный пример, где мы получаем информацию о всех полях класса, включая их типы и модификаторы.
Вывод программы
Нюансы использования
Доступ к приватным полям:
По умолчанию приватные поля недоступны через getFields(). Для доступа к ним нужно использовать getDeclaredFields() и вызвать метод setAccessible(true).
Пример:
Статические поля:
Для получения значения статического поля можно передать null в метод get().
Пример:
#Java #Training #Medium #Reflection_API #Field
Пример получения информации о полях
Рассмотрим более сложный пример, где мы получаем информацию о всех полях класса, включая их типы и модификаторы.
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
class Example {
public String publicField = "Public Field";
private int privateField = 42;
protected static final double PROTECTED_FIELD = 3.14;
}
public class Main {
public static void main(String[] args) throws Exception {
Class<?> clazz = Example.class;
// Получаем все поля (публичные и унаследованные)
Field[] fields = clazz.getFields();
System.out.println("Public Fields:");
for (Field field : fields) {
System.out.println(" Name: " + field.getName());
System.out.println(" Type: " + field.getType().getName());
System.out.println(" Modifiers: " + Modifier.toString(field.getModifiers()));
}
// Получаем все объявленные поля (включая приватные и защищенные)
Field[] declaredFields = clazz.getDeclaredFields();
System.out.println("Declared Fields:");
for (Field field : declaredFields) {
System.out.println(" Name: " + field.getName());
System.out.println(" Type: " + field.getType().getName());
System.out.println(" Modifiers: " + Modifier.toString(field.getModifiers()));
}
}
}
Вывод программы
Public Fields:
Name: publicField
Type: java.lang.String
Modifiers: public
Declared Fields:
Name: publicField
Type: java.lang.String
Modifiers: public
Name: privateField
Type: int
Modifiers: private
Name: PROTECTED_FIELD
Type: double
Modifiers: protected static final
Нюансы использования
Доступ к приватным полям:
По умолчанию приватные поля недоступны через getFields(). Для доступа к ним нужно использовать getDeclaredFields() и вызвать метод setAccessible(true).
Пример:
Field privateField = clazz.getDeclaredField("privateField");
privateField.setAccessible(true); // Разрешаем доступ к приватному полю
System.out.println("Private Field Value: " + privateField.get(new Example())); // Вывод: 42
Статические поля:
Для получения значения статического поля можно передать null в метод get().
Пример:
Field staticField = clazz.getDeclaredField("PROTECTED_FIELD");
staticField.setAccessible(true);
System.out.println("Static Field Value: " + staticField.get(null)); // Вывод: 3.14
#Java #Training #Medium #Reflection_API #Field
Получение информации о методах.
Класс Method в Java является частью Reflection API и представляет собой метаинформацию о методах класса. С помощью этого класса можно получить информацию о методах, их параметрах, возвращаемых типах и аннотациях.
Что такое метод класса и как его получить
Метод класса — это блок кода, который выполняет определенную задачу.
В Java методы могут быть:
Публичными (public): доступны из любого класса.
Приватными (private): доступны только внутри класса.
Защищенными (protected): доступны внутри класса и его подклассов.
По умолчанию (без модификатора): доступны внутри пакета.
Для получения методов класса используются методы:
getMethods()
Возвращает массив всех публичных методов класса, включая унаследованные от суперклассов и интерфейсов.
Пример:
getDeclaredMethods()
Возвращает массив всех методов, объявленных в классе (включая приватные и защищенные), но не включает унаследованные методы.
Пример:
Пример получения методов класса
#Java #Training #Medium #Reflection_API #Method
Класс Method в Java является частью Reflection API и представляет собой метаинформацию о методах класса. С помощью этого класса можно получить информацию о методах, их параметрах, возвращаемых типах и аннотациях.
Что такое метод класса и как его получить
Метод класса — это блок кода, который выполняет определенную задачу.
В Java методы могут быть:
Публичными (public): доступны из любого класса.
Приватными (private): доступны только внутри класса.
Защищенными (protected): доступны внутри класса и его подклассов.
По умолчанию (без модификатора): доступны внутри пакета.
Для получения методов класса используются методы:
getMethods()
Возвращает массив всех публичных методов класса, включая унаследованные от суперклассов и интерфейсов.
Пример:
Class<?> clazz = String.class;
Method[] methods = clazz.getMethods();
for (Method method : methods) {
System.out.println(method.getName());
}
getDeclaredMethods()
Возвращает массив всех методов, объявленных в классе (включая приватные и защищенные), но не включает унаследованные методы.
Пример:
Method[] declaredMethods = clazz.getDeclaredMethods();
for (Method method : declaredMethods) {
System.out.println(method.getName());
}
Пример получения методов класса
import java.lang.reflect.Method;
public class Main {
public static void main(String[] args) {
Class<?> clazz = String.class;
// Получение всех публичных методов
System.out.println("Public Methods:");
Method[] methods = clazz.getMethods();
for (Method method : methods) {
System.out.println(method.getName());
}
// Получение всех объявленных методов
System.out.println("\nDeclared Methods:");
Method[] declaredMethods = clazz.getDeclaredMethods();
for (Method method : declaredMethods) {
System.out.println(method.getName());
}
}
}
#Java #Training #Medium #Reflection_API #Method
Что выведет код?
#Tasks
abstract class Shape {
abstract void draw();
}
class Circle extends Shape {
void draw() {
System.out.println("Drawing Circle");
}
}
class Square extends Shape {
void draw() {
System.out.println("Drawing Square");
}
}
public class Task070225 {
public static void main(String[] args) {
Shape shape = new Circle();
shape.draw();
shape = new Square();
shape.draw();
shape = null;
shape.draw();
}
}
#Tasks
Please open Telegram to view this post
VIEW IN TELEGRAM
Вопросы с собеседования 👩💻
Какой тип данных используется для хранения целых чисел?
Какой тип данных используется для хранения целых чисел?
Anonymous Quiz
4%
float
94%
int
0%
double
2%
char
Получение информации о методах.
Работа с параметрами методов
getParameterTypes()
Возвращает массив Class объектов, представляющих типы параметров метода.
Пример:
getReturnType()
Возвращает Class объект, представляющий тип возвращаемого значения метода.
Пример:
Пример получения информации о параметрах и возвращаемом типе
Пример с приватным методом
#Java #Training #Medium #Reflection_API #Method
Работа с параметрами методов
getParameterTypes()
Возвращает массив Class объектов, представляющих типы параметров метода.
Пример:
Class<?> clazz = String.class;
Method method = clazz.getMethod("substring", int.class, int.class);
Class<?>[] parameterTypes = method.getParameterTypes();
for (Class<?> paramType : parameterTypes) {
System.out.println(paramType.getName()); // Вывод: int, int
}
getReturnType()
Возвращает Class объект, представляющий тип возвращаемого значения метода.
Пример:
Class<?> returnType = method.getReturnType();
System.out.println(returnType.getName()); // Вывод: java.lang.String
Пример получения информации о параметрах и возвращаемом типе
import java.lang.reflect.Method;
public class Main {
public static void main(String[] args) throws NoSuchMethodException {
Class<?> clazz = String.class;
// Получение метода substring(int, int)
Method method = clazz.getMethod("substring", int.class, int.class);
// Получение типов параметров
System.out.println("Parameter Types:");
Class<?>[] parameterTypes = method.getParameterTypes();
for (Class<?> paramType : parameterTypes) {
System.out.println(paramType.getName());
}
// Получение возвращаемого типа
System.out.println("\nReturn Type:");
Class<?> returnType = method.getReturnType();
System.out.println(returnType.getName());
}
}
Пример с приватным методом
import java.lang.reflect.Method;
class MyClass {
private void myPrivateMethod(int a, String b) {
System.out.println("Private Method: " + a + ", " + b);
}
}
public class Main {
public static void main(String[] args) throws NoSuchMethodException {
Class<?> clazz = MyClass.class;
// Получение приватного метода
Method method = clazz.getDeclaredMethod("myPrivateMethod", int.class, String.class);
// Получение типов параметров
System.out.println("Parameter Types:");
Class<?>[] parameterTypes = method.getParameterTypes();
for (Class<?> paramType : parameterTypes) {
System.out.println(paramType.getName()); // Вывод: int, java.lang.String
}
// Получение возвращаемого типа
System.out.println("\nReturn Type:");
Class<?> returnType = method.getReturnType();
System.out.println(returnType.getName()); // Вывод: void
}
}
#Java #Training #Medium #Reflection_API #Method
Всем добрейшего субботнего утра! 🔆
Ну как, настроены на выходные?
Очень хотел продолжить запись по созданию сервиса на неделе, но что-то много задач по работе навалилось и теперь только завтра😉
Так что жду😏
Ну как, настроены на выходные?
Очень хотел продолжить запись по созданию сервиса на неделе, но что-то много задач по работе навалилось и теперь только завтра
Так что жду
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Всем привет! ✊
Сегодня в 16:00 по МСК вновь жду Вас на встречу, где мы продолжим писать сервис доставки товаров!)😮
Приходите!✌️
Сегодня в 16:00 по МСК вновь жду Вас на встречу, где мы продолжим писать сервис доставки товаров!)
Приходите!
Please open Telegram to view this post
VIEW IN TELEGRAM