В 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
})
}
Для правильной поддержки рефакторинга (переименовать класс) вы должны использовать либо:
MyClass.class.getName(); // full name with package
, либо (спасибо @James Van Huis ):
MyClass.class.getSimpleName(); // class name and no more
Если вы хотите, чтобы вместе с ним было полное имя пакета, позвоните:
String name = MyClass.class.getCanonicalName();
Если вам нужен только последний элемент, вызовите :
String name = MyClass.class.getSimpleName();
Злоупотребление SecurityManager
System.getSecurityManager().getClassContext()[0].getName();
Или, если он не установлен, использовать внутренний класс, расширяющий его (пример ниже постыдно скопирован из Real's HowTo ):
public static class CurrentClassGetter extends SecurityManager {
public String getClassName() {
return getClassContext()[1].getName();
}
}
Делайте то, что говорит инструментарий. Не делайте ничего подобного:
return new Object() { }.getClass().getEnclosingClass();
Я использую это, чтобы запустить 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());
Эта инструкция работает нормально:
Thread.currentThread().getStackTrace()[1].getClassName();