В Java можно получить доступ к классу, не используя (другими словами, набирая) имя класса. Пример
public class Example {
/**
* Non static context, can only be called from an instance.
*/
public void accessClass() {
System.out.println(this.getClass());
}
}
Однако в статическом контексте нет аналогичного метода, кроме только статического поля .class. Этот вопрос сосредоточен на доступе к .class из самого класса java, а не из других классов.
public class Example2 {
//field used to demonstrate what is meant by "indirectly referencing the class name.
private static Class<Example2> otherClass = Example2.class;
private static int intField = 1;
/**
* Non static context, can only be called from an instance.
*/
public static void accessClass() {
// The .class static field can be accessed by using the name of the class
System.out.println(Example2.class);
// However the following is wrong
// System.out.println(class);
// Accessing static fields is in general possible
System.out.println(intField);
// Accessing a static field of the same Class is also possible, but does not satisfy the answer since the class name has been written in the declaration of the field and thus indirectly referenced.
System.out.println(otherClass);
}
}
Есть ли способ получить доступ к объекту .class
класса из статического контекста этого же класса без ссылки на имя класса (ни прямо, ни косвенно)?
Другое ограничение заключается в том, что в ответе не разрешается создавать экземпляр класса или использовать метод экземпляра .getClass()
.
Я создал несколько примеров выше, которые пытаются продемонстрировать мои выводы.
Я с удивлением заметил, что не могу найти способ получить доступ к полю .class
без ввода имени класса из того же класса.
Является ли это просто побочным эффектом некоторых проектных решений, или есть какая-то фундаментальная причина, по которой доступ к .class
невозможен без имени класса?