Может у кого-нибудь возникала такая проблема? Предположим, вам нужно получить некий ресурс из JAR файла, причем обязательно при помощи InputStream. Сделать это можно через конструкцию вида:
DataInputStream dis = new DataInputStream(getClass().getResourceAsStream("/some_resource"));
А теперь, предположим, вы хотите организовать загрузку этого ресурса из статического метода (ну, например, в виде какого-нибудь менеджера ресурсов). Вы радостно делаете метод static и что получаете? Правильно, предупреждение о том, что не статический метод getClass() вызывается из статического контекста. Что же делать в такой ситуации? На самом деле решение не совсем очевидно, особенно, если вы знакомы только с мобильной версией явы. Дело в том, что getClass() возвращает экземпляр класса, загруженного в память и работающего в текущей рантайм-сессии. А значит, статическим он быть не может. Но ведь у любого объекта есть такая замечательная ссылка вида:
Вот ее и нужно использовать, приведя функцию к виду:
DataInputStream dis = new DataInputStream(SomeObject.class.getResourceAsStream("/some_resource"));
причем в качестве SomeObject используя непосредственно имя класса, в котором содержится этот метод. Помните, что this также не может быть вызван из статического контекста, так как указывает на уже созданный объект!