@thatmaniscool

Как изменить значение поля интерфейса в Java?

Прежде всего я создаю интерфейс, который будет вести логи операции.
public interface Logs { public void Log (); }
После чего я создаю интерфейс, который будет обрабатывать логи.
import java.util.*;

public interface DataLogs {
	public String NameOfUser ();
	public String NameOfSurname ();
	public List <Logs> logs ();
	
	public static class MyLogs {
		private static boolean TurnKey = false; // К этому полю мне нужно получить доступ.
		
		public static void ShowLogs (DataLogs data){
			System.out.println("User's name: " + data.NameOfUser());
			System.out.println("User's surname: " + data.NameOfSurname());
			
			// Если ключ в положении истина  - показать проведенные операции.
			if (TurnKey == true)
				for (Logs ShowLog : data.logs()){
					ShowLog.Log();
				}
			else
				System.err.println("Acces to Logs is denied!");
		} // The end of ShowLogs!
	}
}

После чего создаю класс, который будет например, собирать информацию логи.
import java.util.*;

public class Person implements DataLogs{
	private String name;
	private String Surname;
	private List <Logs> AllMyLogs = new ArrayList <Logs> ();
	
	public Person (String name, String Surname, int size){
		this.name = name; this.Surname = Surname;
		String str = "Some operations!";
		
		// Предположим этот метод получает данные из MySQL
		for (int i=0; i!=size; i++){ 
			AllMyLogs.add(
					new Logs (){
						public void Log() {
							System.out.println(str);
						}});
		}
	 }

	public String NameOfUser() {
		return name;
	}
	public String NameOfSurname() {
		return Surname;
	}
	public List<Logs> logs() {
		return AllMyLogs; // Отправляем логи в интерфейс.
	}
}

Ну и собственно запускаем программу<code lang="java">
</code>

public class MainClass {

	public static void main(String[] args) {
		DataLogs.MyLogs.ShowLogs(new Person ("Nilokay", "Smirnow", 10));
	}
}


Теперь, мне нужно получить доступ к булевому значению TurnKey, который находится в классе в MyLogs, интерфейса MyLogs.
Как это сделать?
ПС,
Например, мне не составляет труда получить и изменить доступ таким образом.
Делаю класс с приватными полями.
public class PrivateFields {
	private boolean Key = false;
	
	public void ShowStatus (){
		System.out.println("Status: " + Key);
	}
}

И собственно главный класс, где эти поля редактируются.
import java.lang.reflect.*;
public class MainClass {

	public static void main(String[] args) {
		PrivateFields PF = new PrivateFields ();
		PF.ShowStatus();

		try {
			Field field = PF.getClass().getDeclaredField("Key");
			field.setAccessible(true);
			field.setBoolean(PF, true);
		
		} catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException   e) {
			e.printStackTrace();
		}

		PF.ShowStatus();
	}
}


Как сделать тоже самое, но с интерфейсом, который содержит класс?
  • Вопрос задан
  • 794 просмотра
Пригласить эксперта
Ответы на вопрос 1
Shockoway
@Shockoway
Код из разряда "и обфускация не нужна".
Просто вынесите класс MyLogs за пределы интерфейса и добавьте ему нормальный человеческий сеттер (рефлексия? seriously!?) для переменной, которую вы хотите менять.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
16 мая 2024, в 23:36
200000 руб./за проект
16 мая 2024, в 23:10
12000 руб./за проект