| /* |
| * Copyright (C) 2005 db4objects Inc. http://www.db4o.com |
| * |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * db4objects - Initial API and implementation |
| */ |
| package org.eclipse.jface.examples.databinding.ducks; |
| |
| import java.lang.reflect.Method; |
| |
| /** |
| * ReflectedMethod. Encapsulates a method that may or may not exist on |
| * some receiver. Invocation policy is that if the method can be invoked, |
| * it is. On failure, returns null. |
| * |
| * @author djo |
| */ |
| public class ReflectedMethod { |
| |
| private Object subject; |
| private Method method; |
| |
| /** |
| * Constructor ReflectedMethod. Create a ReflectedMethod object. |
| * |
| * @param subject The object on which the method lives. |
| * @param methodName The name of the method. |
| * @param paramTypes The method's parameter types. |
| */ |
| public ReflectedMethod(Object subject, String methodName, Class[] paramTypes) { |
| this.subject = subject; |
| method = null; |
| try { |
| method = subject.getClass().getMethod(methodName, paramTypes); |
| } catch (Exception e) { |
| System.out.println(e); |
| } |
| } |
| |
| /** |
| * Method exists. Returns true if the underlying method exists, false |
| * otherwise. |
| * |
| * @return true if the underlying method exists, false otherwise. |
| */ |
| public boolean exists() { |
| return method != null; |
| } |
| |
| /** |
| * Method invoke. If possible, invoke the encapsulated method with the |
| * specified parameters. |
| * |
| * @param params An Object[] containing the parameters to pass. |
| * @return any return value or null if there was no return value or an |
| * error occured. |
| */ |
| public Object invoke(Object[] params) { |
| if (method == null) |
| return null; |
| try { |
| if (!method.isAccessible()) { |
| method.setAccessible(true); |
| } |
| return method.invoke(subject, params); |
| } catch (Exception e) { |
| return null; |
| } |
| } |
| |
| /** |
| * Method getType. Returns the return type of the method. |
| * |
| * @return The return type or null if none. |
| */ |
| public Class getType() { |
| return method.getReturnType(); |
| } |
| } |
| |
| |