获取属性描述符
/* 来自 时 代 J a v a*/ /* * Copyright 2000-2014 Vaadin Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ //package com.nowjava; import java.beans.BeanInfo; import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; public class Main { private static List<PropertyDescriptor> getPropertyDescriptors( BeanInfo beanInfo) { PropertyDescriptor[] descriptors = beanInfo .getPropertyDescriptors(); List<PropertyDescriptor> result = new ArrayList<PropertyDescriptor>( descriptors.length); for (PropertyDescriptor descriptor : descriptors) { try { Method readMethod = getMethodFromBridge(descriptor//时代Java公众号 提供 .getReadMethod()); if (readMethod != null) { Method writeMethod = getMethodFromBridge( descriptor.getWriteMethod(), readMethod.getReturnType()); if (writeMethod == null) { writeMethod = descriptor.getWriteMethod(); } PropertyDescriptor descr = new PropertyDescriptor( descriptor.getName(), readMethod, writeMethod); result.add(descr); } else { result.add(descriptor); } } catch (SecurityException ignore) { // handle next descriptor } catch (IntrospectionException e) { result.add(descriptor); } } return result; } /** * Return declared method for which {@code bridgeMethod} is generated. If * {@code bridgeMethod} is not a bridge method then return null. */ private static Method getMethodFromBridge(Method bridgeMethod) throws SecurityException { if (bridgeMethod == null) { return null; } return getMethodFromBridge(bridgeMethod, bridgeMethod.getParameterTypes()); } /** * Return declared method for which {@code bridgeMethod} is generated using * its {@code paramTypes}. If {@code bridgeMethod} is not a bridge method * then return null. */