Итак, я работаю над компилятором с нуля, но споткнулся о том, как определить, с каким классом был вызван статический метод. Посмотрите на пример:Доступ к типу содержащего класса статического метода в Java
public abstract class Token {
public TokenType type;
public Token() {
super();
this.type = TokenType.getInstance(this.getClass());
}
public static TokenType type() {
Class<? extends Token> t = null; //WHAT SHOULD GO HERE
return TokenType.getInstance(t);
}
}
Если бы я тогда есть два класса, которые наследуют от маркеров
public class TestToken extends Token {
public TestToken() {
super()
}
}
и
public class TestToken2 extends Token {
public TestToken2() {
super()
}
}
Как я называю TestToken.type() и TestToken2 .type(), и знаете ли статический метод, через который он был вызван? В частности, мне нужен доступ к объекту Class каждого из них. Возможно ли это?
Примечание Я знаю, что я мог бы трудно код в классе каждый, но, похоже, ненужной работы, и как меньше удовольствия :)
Ответ Привет люди из будущего. Как Нильс подробно объясняет ниже, это невозможно. Вам нужно будет найти другой способ.
Значит, type() всегда вызывался через токен, даже когда TestToken.type()? –
Да, там нет ничего, что могло бы вам помочь. –
Спасибо, просто немного экспериментировал с демпингом трассировки стека, и похоже, что вызов действительно Token, даже не касается TestToken. Благодаря! Я найду другой способ сделать то, что мне нужно. –