publication_year
не является столбцом в таблице wp_posts
. См. Описание базы данных WordPress . Если параметр orderby
недопустим, WordPress вернется к сортировке по умолчанию, которой является столбец post_date
.
Если это мета-значение, вы должны использовать:
$args = array(
'post_type' => 'publication',
'post_status' => 'publish',
'category_name' => 'my-category',
'posts_per_page' => 20,
'orderby' => 'meta_value_num',
'meta_key' => 'publication_year',
'order' => 'DESC',
'paged' => $paged
);
См. Кодекс WordPress для дополнительной информации.
Эти операторы не идентичны. Метод броска является нормальным вызовом метода (invokevirtual
Инструкция JVM), в то время как другой конструкция языка (checkcast
инструкция). В случае Вы показываете выше, необходимо использовать вторую форму: (TrTuDocPackTypeDto) packDto
cast
метод используется в отражающем программировании с дженериками, когда у Вас есть Экземпляр класса для некоторого типа переменной. Вы могли использовать его как это:
public <T> Set<T> find(Class<T> clz, Filter criteria) {
List<?> raw = session.find(clz, criteria); /* A legacy, un-generic API. */
Set<T> safe = new HashSet<T>();
for (Object o : raw)
safe.add(clz.cast(o));
return safe;
}
Это дает Вам безопасный способ избежать неправильной альтернативы для простого кастинга необработанного типа к универсальному типу:
/* DO NOT DO THIS! */
List raw = new ArrayList();
...
return (List<Widget>) raw;
Компилятор предупредит Вас, Unchecked cast from List to List<Widget>
, означая, что в замещающем знаке, кто-то, возможно, добавил a Gadget
к необработанному списку, который в конечном счете вызовет a ClassCastException
когда вызывающая сторона выполняет итерации по возвращенному списку (воображаемого) Widget
экземпляры.
С первой формой
trTuDocPackTypdBd.update(TrTuDocPackTypeDto.class.cast(packDto));
можно сделать это:
public void dynamicCast( Class clazz, Object o ) {
this.x = clazz.cast( o );
}
Со вторым Вы не можете. Класс кастинга должен быть трудно кодирован.
Почему Вы использовали бы переменную для кастинга в первом месте? Это - другой вопрос.:) Первая вещь, которая приходит на ум, Вы не знаете (во время компиляции) класс, который будет литым к.
Основной случай для того, чтобы сделать его (IME) - когда необходимо безопасно бросить в универсальном классе/методе. Должный ввести стирание, Вы не можете бросить к T
но если Вам предоставили a Class<? extends T>
параметр затем, который можно использовать это для кастинга и результат, будет присваиваемым переменной типа T
.
Оба из этих операторов идентичны. Выберите, какой бы ни один Вы находите более читаемыми. Второй метод более распространен, по моему опыту, и это однажды это, я предпочитаю.
Я склонен использовать метод броска только, когда я работаю с отражением, и это читает более хороший в той ситуации. Все другие времена я использую второй способ бросить.
Я не могу найти пример, где метод броска возможен и синтаксис броска нет. Однако смотря на код, кажется, что в случае, если бросок не возможен, метод броска бросает ClassCastException без присоединенной информации о типе, тогда как синтаксис броска даст Вам некоторые подсказки (поскольку в, "не мог бросить Излишне любопытный в TyrannosorusRex"):
/**
* Casts an object to the class or interface represented
* by this <tt>Class</tt> object.
*
* @param obj the object to be cast
* @return the object after casting, or null if obj is null
*
* @throws ClassCastException if the object is not
* null and is not assignable to the type T.
*
* @since 1.5
*/
public T cast(Object obj) {
if (obj != null && !isInstance(obj))
throw new ClassCastException();
return (T) obj;
}