Получение имени класса от статического метода в Java

В Swift 2.2 вы можете создать папку, используя

func createFolderWith(Name: String!) {
    let folderRequest: AWSS3PutObjectRequest = AWSS3PutObjectRequest()
    folderRequest.key = Name + "/"
    folderRequest.bucket = "Your Bucket Name"
    AWSS3.defaultS3().putObject(folderRequest).continueWithBlock({ (task) -> AnyObject? in
        if task.error != nil {
            assertionFailure("* * * error: \(task.error?.localizedDescription)")
        } else {
            print("created \(Name) folder")
        }
        return nil
    })
}
232
задан Miles D 1 June 2009 в 09:42
поделиться

6 ответов

Для правильной поддержки рефакторинга (переименовать класс) вы должны использовать либо:

 MyClass.class.getName(); // full name with package

, либо (спасибо @James Van Huis ):

 MyClass.class.getSimpleName(); // class name and no more
220
ответ дан 23 November 2019 в 03:34
поделиться

Если вы хотите, чтобы вместе с ним было полное имя пакета, позвоните:

String name = MyClass.class.getCanonicalName();

Если вам нужен только последний элемент, вызовите :

String name = MyClass.class.getSimpleName();
9
ответ дан 23 November 2019 в 03:34
поделиться

Злоупотребление SecurityManager

System.getSecurityManager().getClassContext()[0].getName();

Или, если он не установлен, использовать внутренний класс, расширяющий его (пример ниже постыдно скопирован из Real's HowTo ):

public static class CurrentClassGetter extends SecurityManager {
    public String getClassName() {
        return getClassContext()[1].getName(); 
    }
}
13
ответ дан 23 November 2019 в 03:34
поделиться

Делайте то, что говорит инструментарий. Не делайте ничего подобного:

return new Object() { }.getClass().getEnclosingClass();
118
ответ дан 23 November 2019 в 03:34
поделиться

Я использую это, чтобы запустить Log4j Logger в верхней части моих классов (или аннотировать).

PRO: Throwable уже загружен, и вы можете сэкономить ресурсы, не используя "IO Heavy" "SecurityManager.

ПРОТИВ: Некоторые вопросы относительно того, будет ли это работать для всех JVM.

// Log4j . Logger --- Get class name in static context by creating an anonymous Throwable and 
// getting the top of its stack-trace. 
// NOTE you must use: getClassName() because getClass() just returns StackTraceElement.class 
static final Logger logger = Logger.getLogger(new Throwable() .getStackTrace()[0].getClassName()); 
20
ответ дан 23 November 2019 в 03:34
поделиться

Эта инструкция работает нормально:

Thread.currentThread().getStackTrace()[1].getClassName();
38
ответ дан 23 November 2019 в 03:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: