Прежде всего я создаю интерфейс, который будет вести логи операции.
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();
}
}
Как сделать тоже самое, но с интерфейсом, который содержит класс?