@SuppressWarnings("null")
	final MemberAccessor createMemberAccessor(final Field field) throws IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException {
		// 1. フィールドアノテーションを得る
		Class<? extends Annotation> field_anno_clazz = null;
		MemberAccessorFactory maf = null;
		for (final Annotation anno : field.getAnnotations()) {
			final Class<? extends Annotation> anno_clazz = anno.annotationType();
			if (_supported_annotation_memberaccessorfactory_map.containsKey(anno_clazz)) {
				field_anno_clazz = anno_clazz;
				maf = _supported_annotation_memberaccessorfactory_map.get(anno_clazz);
				break;
			}
		}
		
		if (field_anno_clazz == null) {
			final Class<?> field_type = field.getType();
			if (_default_field_annotation_map.containsKey(field_type)) {
				field_anno_clazz = _default_field_annotation_map.get(field_type);
				maf = _supported_annotation_memberaccessorfactory_map.get(field_anno_clazz);
			} else if (field_type.isArray()) {
				field_anno_clazz = ExternStructArray.class;
				maf = _extern_struct_array_memberaccessorfactory;
			} else {
				field_anno_clazz = ExternStruct.class;
				maf = _extern_struct_memberaccessorfactory;
			}
			
		}
		
		if (!maf.isSupportType(field.getType()))
			throw new IllegalArgumentException("Field type of " + field.getType() + " is not applicable for the " + field_anno_clazz + " (" + maf.getSupportType() + " is not contains " + field.getType() + ")");
		
		return maf.createInstance(field);
	}