Вы загрузили набор данных и ярлыки с официального сайта Coco, если вы это сделаете, следуйте комментариям в файле py
"""
Example usage:
python create_coco_tf_record.py --logtostderr \
--train_image_dir="${TRAIN_IMAGE_DIR}" \
--val_image_dir="${VAL_IMAGE_DIR}" \
--test_image_dir="${TEST_IMAGE_DIR}" \
--train_annotations_file="${TRAIN_ANNOTATIONS_FILE}" \
--val_annotations_file="${VAL_ANNOTATIONS_FILE}" \
--testdev_annotations_file="${TESTDEV_ANNOTATIONS_FILE}" \
--output_dir="${OUTPUT_DIR}"
"""
Если вы не против использования сторонней библиотеки, BeanUtils от Apache Commons справится с этим довольно легко, используя copyProperties (Object, Object)
.
Основная идея Mladen работала (благодарит), но нуждался в нескольких изменениях, чтобы быть устойчивым, таким образом, я внес их здесь.
единственное место, где этот тип решения должен использоваться, - то, если Вы хотите клонировать объект, но не можете, потому что это - управляемый объект. Если Вам повезло иметь объекты, что у всех есть 100%-й побочный эффект свободные методы set для всех полей, необходимо определенно использовать опцию BeanUtils вместо этого.
Здесь, я использую служебные методы lang3 упростить код, поэтому если Вы вставляете его, необходимо сначала импортировать lang3 библиотеку Apache.
код Копии
static public <X extends Object> X copy(X object, String... skipFields) {
Constructor constructorToUse = null;
for (Constructor constructor : object.getClass().getConstructors()) {
if (constructor.getParameterTypes().length == 0) {
constructorToUse = constructor;
constructorToUse.setAccessible(true);
break;
}
}
if (constructorToUse == null) {
throw new IllegalStateException(object + " must have a zero arg constructor in order to be copied");
}
X copy;
try {
copy = (X) constructorToUse.newInstance();
for (Field field : FieldUtils.getAllFields(object.getClass())) {
if (Modifier.isStatic(field.getModifiers())) {
continue;
}
//Avoid the fields that you don't want to copy. Note, if you pass in "id", it will skip any field with "id" in it. So be careful.
if (StringUtils.containsAny(field.getName(), skipFields)) {
continue;
}
field.setAccessible(true);
Object valueToCopy = field.get(object);
//TODO add here other special types of fields, like Maps, Lists, etc.
field.set(copy, valueToCopy);
}
} catch (InstantiationException | IllegalAccessException | IllegalArgumentException
| InvocationTargetException e) {
throw new IllegalStateException("Could not copy " + object, e);
}
return copy;
}
ОБНОВЛЕНИЕ 19 ноября 2012 г .: Также появился новый проект ModelMapper .
Первым аргументом tooF.set ()
должен быть целевой объект ( тоже
), а не поле, а второй аргумент должен быть значение , а не поле, из которого взято значение. (Чтобы получить значение, вам нужно вызвать fromF.get ()
- снова передав целевой объект, в данном случае из
.)
Большая часть API отражения работает так. Вы получаете объекты Поле
, объекты метода
и так далее из класса, а не из экземпляра, поэтому для их использования (кроме статики) вам обычно необходимо передать им экземпляр.