В дополнение к другим ответам, я рекомендую эту онлайн-службу open source jsonschema2pojo.org для быстрого генерации Java-классов из json или json-схемы для GSON, Jackson 1.x или Jackson 2.x. Например, если у вас есть:
{
"pageInfo": {
"pageName": "abc",
"pagePic": "http://example.com/content.jpg"
}
"posts": [
{
"post_id": "123456789012_123456789012",
"actor_id": 1234567890,
"picOfPersonWhoPosted": "http://example.com/photo.jpg",
"nameOfPersonWhoPosted": "Jane Doe",
"message": "Sounds cool. Can't wait to see it!",
"likesCount": 2,
"comments": [],
"timeOfPost": 1234567890
}
]
}
jsonschema2pojo.org для генерируемого GSON:
@Generated("org.jsonschema2pojo")
public class Container {
@SerializedName("pageInfo")
@Expose
public PageInfo pageInfo;
@SerializedName("posts")
@Expose
public List posts = new ArrayList();
}
@Generated("org.jsonschema2pojo")
public class PageInfo {
@SerializedName("pageName")
@Expose
public String pageName;
@SerializedName("pagePic")
@Expose
public String pagePic;
}
@Generated("org.jsonschema2pojo")
public class Post {
@SerializedName("post_id")
@Expose
public String postId;
@SerializedName("actor_id")
@Expose
public long actorId;
@SerializedName("picOfPersonWhoPosted")
@Expose
public String picOfPersonWhoPosted;
@SerializedName("nameOfPersonWhoPosted")
@Expose
public String nameOfPersonWhoPosted;
@SerializedName("message")
@Expose
public String message;
@SerializedName("likesCount")
@Expose
public long likesCount;
@SerializedName("comments")
@Expose
public List
Форма
real, dimension(:) :: arr
объявляет массив предполагаемой формы , а форма
real :: arr(*)
объявляет предполагаемый размер .
И, да, между их использованием существуют различия. Различия возникают из-за того, что, примерно, компилятор «знает» форму массива предполагаемой формы, но не массива предполагаемого размера. Дополнительная информация, доступная компилятору, означает, что, помимо прочего, массивы предполагаемых форм могут использоваться в выражениях всего массива. Массив предполагаемого размера может использоваться только в выражениях целого массива, когда он является фактическим аргументом в ссылке на процедуру, которая не требует формы массива. О, а также в вызове внутреннему lbound
- но не в вызове внутреннего ubound
. Существуют и другие тонкие, и не очень тонкие различия, которые обнаруживают ваше близкое чтение стандарта или хорошей книги Fortran.
Некоторые советы для новых программистов Fortran - использовать массивы предполагаемой формы, когда возможное. Они не были доступны до Fortran 90, поэтому вы увидите множество массивов предполагаемого размера в старом коде. Предполагаемые формы массивов лучше в новом коде, потому что функции shape
и size
могут использоваться для запроса их размеров, чтобы избежать ошибок за пределами границ и allocate
массивов, размеры которых зависят от размеров входных массивов .
Ответ высокой производительности Mark объясняет разницу между двумя утверждениями - короче говоря: да, есть разница; только один объявляет массив предполагаемого размера - и последствия.
Однако, как и dimension(:)
, но упоминается, казалось бы, против not dimension(*)
, я добавлю одно.
real, dimension(:) :: arr1
real, dimension(*) :: arr2
эквивалентно
real :: arr1(:)
real :: arr2(*)
или даже с помощью операторов dimension
. [Я не хочу этого поощрять, поэтому я не буду выписывать этот пример.]
Важное различие в вопросе заключается в использовании *
и :
, а не dimension
,
Возможно, было некоторое слияние предполагаемого размера с фиктивным аргументом ? Это как фиктивный аргумент, где этот выбор наиболее распространен.