我想解决此编译器警告:
public function cities_meta_box($post, $box)
{
$defaults = array('taxonomy' => 'category');
if (!isset($box['args']) || !is_array($box['args'])):
$args = array();
else:
$args = $box['args'];
endif;
extract(wp_parse_args($args, $defaults), EXTR_SKIP);
$tax = get_taxonomy($taxonomy);
echo '<div id="taxonomy-'.$taxonomy.'" class="acf-taxonomy-field categorydiv">';
$name = ($taxonomy == 'category') ? 'post_category' : 'tax_input[' . $taxonomy . ']';
echo "<input type='hidden' name='{$name}[]' value='0' />";
$term_obj = wp_get_object_terms($post->ID, $taxonomy);
echo '<ul id="'.$taxonomy.'checklist" data-wp-lists="list:'.$taxonomy.'"
class="categorychecklist form-no-clear"></ul>';
// var_dump($term_obj);
wp_dropdown_categories(array(
'taxonomy' => $taxonomy,
'hide_empty' => 0,
'name' => "{$name}[]",
'selected' => $term_obj[0]->slug,
'orderby' => 'name',
'hierarchical' => 0,
'show_option_none' => '—'
));
echo '</div>';
}
我的目标是使用以下方法比较两个未知类型(背景)的unchecked call to compareTo(T) as member of the raw type java.lang.Comparable
对象。
java.lang.Object
我知道问题在于方法将两个对象都强制转换为public static boolean Compare(Object o1, Object o2) {
//check if both classes are the same
if(!o1.getClass().equals(o2.getClass())) {
return false;
}
if(Comparable.class.isAssignableFrom(o1.getClass())
&& Comparable.class.isAssignableFrom(o2.getClass())) {
//only if both objects implement comparable
return Comparable.class.cast(o1).compareTo(Comparable.class.cast(o2)) == 0;
}
//other comparison techniques...
}
(Comparable
),但是Comparable<Object>
并未实现Object
。
代码本身可以工作,但是编译器在使用其-Xlint:unchecked参数时会发出警告。
目标:
答案 0 :(得分:0)
您不能轻易逃避编译器警告。告诉您何时进行的类型操作可能会在运行时中断,这是它的工作。实现目标的唯一方法是进行更多未经检查的操作,例如:
if(Comparable.class.isAssignableFrom(o1.getClass())
&& Comparable.class.isAssignableFrom(o2.getClass())) {
// Cache this somewhere if you're really going to use it
Method compareTo = Comparable.class.getMethod("compareTo", Object.class);
Integer result = (Integer) compareTo.invoke(o1, o2);
return result == 0;
}
最好的选择是在转换对象时仍然使用@SuppressWarnings
一次,然后继续进行。如果由于某种原因不能保证参数的类型安全,则可以使用它。