import java.io.File;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
public class Main {
public static void main(String[] args) throws IllegalAccessException {
Person p = new Person("w",1);
Class cl = p.getClass();
Field[] f = cl.getDeclaredFields();
for(Field f1: f) {
f1.setAccessible(true);
f1.set(p, "qw");
System.out.println(p.getName());
}
}
}
class Person{
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Person(String name, int age) {
this.age = age;
this.name = name;
}
public void say(){
System.out.println("hello");
}
}
Java
Java проблема с рефлексией.
Программа должная менять поле , со сменой инта она справляется, а вот стринг просто ошибка . Что не так и что можно поменять
Потому что ты в цикле каждому полю присваивашь "qw". А у тебя два поля: строковое и целочисленное, соответственно когда ты пытаешься присвоить строку в целочисленное поле получаешь ошибку, вполне логично
может наоборот -- со текстовым прокатывает, а с целочисленным выпадает в ошибку?
В вашем коде вы используете рефлексию для изменения значений полей в классе Person. Вы успешно меняете значение поля типа int, но получаете ошибку при попытке изменить значение поля типа String.
Ошибка возникает потому, что поле name в классе Person является приватным (private). Для того чтобы изменить значение приватного поля с помощью рефлексии, вам необходимо вызвать метод setAccessible(true) для этого поля перед изменением значения.
Вот исправленный код:
Ошибка возникает потому, что поле name в классе Person является приватным (private). Для того чтобы изменить значение приватного поля с помощью рефлексии, вам необходимо вызвать метод setAccessible(true) для этого поля перед изменением значения.
Вот исправленный код:
import java.lang.reflect.Field;
public class Main {
public static void main(String[] args) throws IllegalAccessException {
Person p = new Person("w", 1);
Class cl = p.getClass();
Field[] f = cl.getDeclaredFields();
for (Field f1 : f) {
f1.setAccessible(true);
if (f1.getType() == String.class) {
f1.set(p, "qw");
}
System.out.println(p.getName());
}
}
}
class Person {
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Person(String name, int age) {
this.age = age;
this.name = name;
}
public void say() {
System.out.println("hello");
}
}
Похожие вопросы
- Всем привет. Помогите плз. Мне нужна помощь тех кто действительно хорошо знает Java т. к мне нужно выбрать один из курсов
- Помогите доделать код на java. В форму пользователь вводит символ, который нужно заменить на #.
- Не выводит изображение в JAVA
- Java Developer vs Android Developer. Куда дальше?
- Пишут ли стартапы на Java?
- С какой книги начинать изучение Java?
- Помогите сделать java приложение! { СРОЧНО }
- Java и какой толк работать именно в консоле?
- Подскажите пожалуйста, как в данном коде Java сделать так, чтоб при нажатии цифры 3 программа завершала свою работу?
- Почему вакансий программистов c# меньше, чем вакансий java?