Когда я определяю классы обслуживания Android, я часто определяю (на самом деле, скопировать и вставлять) статические методы, которые запускают службу с данными:
public class MyShinyBackgroundService extends Service 
{
    ...
    // start this service if it not running; pass data
    public static void startServiceWithData(String data, Context context) {
        Intent intent = new Intent(context, MyBackgroundService.class);
        intent.setAction(MY_ACTION);
        intent.putExtra(DATA_KEY, data);
        context.startService(intent);
    }
}
Вероятно, вы уже видите ошибку: этот метод вызывает неправильную службу. (Глупый экземпляр и ошибка пасты. Это не произойдет, если я могу написать что-то вроде this.class, но, к сожалению, оно не является синтаксически правильным.)
Есть ли способ в Java ссылаться на .class этого "класса" из статического метода, отличного от имени класса?
ИЗМЕНИТЬ
Я не согласен с @CommonsWare в том, что этот вопрос повторяется, потому что мне нужно .class, а не имя класса; тем не менее этот ответ действительно предложил достаточно хороший хак, который делает код скопированным/вставным:
Intent intent = new Intent(context, new Object(){}.getClass().getEnclosingClass());
(фигурные скобки в new Object(){} важны!!!)
Я определенно предпочел бы менее хакерское решение, поэтому я прошу читателей проголосовать за повторное открытие этого вопроса.
РЕДАКТИРОВАТЬ 2
Теперь я склонен определять thisClass как статический член класса  private (закрытый, потому что было бы неправильно позволить этому члену класса наследоваться или ссылаться из другого места, поскольку MyShinyBackgroundService.thisClass - это так же, как MyShinyBackgroundService.class). Это действительно глупо, что class является зарезервированным словом на Java, так что поле class должно ссылаться через псевдоним.
private static Class thisClass = MyShinyBackgroundService.class;
...   
public static void startServiceFrom(Context someContext) {
    Intent intent = new Intent(someContext, thisClass);
    someContext.startService(intent);
}
