Попробуйте это в своем settings.py при использовании Python 2:
FILE_UPLOAD_PERMISSIONS = 0644
В восьмеричных числах Python 3 должен запуститься с 0o, таким образом, строка была бы:
FILE_UPLOAD_PERMISSIONS = 0o644
для получения дополнительной информации см. документацию .
Вы не можете получить тип.
Универсальные шаблоны реализуются с использованием так называемого стирания типа .
Когда создается экземпляр универсального типа, компилятор переводит эти типы с помощью техника, называемая стиранием шрифта - процесс, в котором компилятор удаляет все информация, относящаяся к параметрам типа и введите аргументы внутри класса или метод. Стирание типов включает Java приложения, которые используют дженерики для поддерживать двоичную совместимость с Библиотеки и приложения Java, которые были созданы до дженериков.
Суть этого заключается в том, что информация о типе используется компилятором и отбрасывается, следовательно, недоступна во время выполнения.
Что касается принудительного T реализует Serializable
, вы просто необходимо следующее:
public class MyClass<T extends Serializable>)
{
public void function(T obj)
{
...
}
}
Это просто ссылка на - это отношение , поэтому класс, реализующий Serializable
, , является Serializable
и можно передать в функцию
.
Что-то вроде этого должно сработать .
private Class<T> dataType;
Type type = getClass().getGenericSuperclass();
if (type instanceof ParameterizedType) {
ParameterizedType paramType = (ParameterizedType) type;
dataType = (Class<T>) paramType.getActualTypeArguments()[0];
} else if (type instanceof Class) {
dataType = (Class<T>) type;
}
Вы не можете использовать T.class, потому что java на самом деле не знает, какой класс T находится во время выполнения.
Вся эта информация теряется при компиляции.
Чтобы получить объект класса для T, вы можете либо вызвать getClass () для экземпляра T (если у вас есть доступ к нему), либо потребовать от пользователя передать объект класса в качестве аргумента функции
, например:
void function(Class<T> c)
Это невозможно без уловок. Часто задаваемые вопросы по Java Generics предлагают идею обходного пути.
вы делаете это:
public class MyClass<T implements Serializable) {
void function(Class<T> tc) {
...
}
}
Обычно вы должны передать класс во время выполнения, чтобы видеть это. Вы также можете сделать что-то вроде этого:
public class MyClass<T implements Serializable) {
Class<T> ct;
public MyClass(Class<T> ct){this.ct = ct;}
void function() {
... //you know what the class is here
}
}
Это немного раздражает, но в целом не такая уж большая проблема.
вы должны передать класс во время выполнения, чтобы увидеть его. Вы также можете сделать что-то вроде этого:public class MyClass<T implements Serializable) {
Class<T> ct;
public MyClass(Class<T> ct){this.ct = ct;}
void function() {
... //you know what the class is here
}
}
Это немного раздражает, но в целом не так уж и сложно.
вы должны передать класс во время выполнения, чтобы увидеть его. Вы также можете сделать что-то вроде этого:public class MyClass<T implements Serializable) {
Class<T> ct;
public MyClass(Class<T> ct){this.ct = ct;}
void function() {
... //you know what the class is here
}
}
Это немного раздражает, но в целом не так уж и сложно.