@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();
	}
}


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

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

Похожие вопросы