001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017
018 package org.apache.commons.proxy.invoker;
019
020 import org.apache.commons.proxy.Invoker;
021
022 import java.io.Serializable;
023 import java.lang.reflect.Method;
024 import java.util.HashMap;
025 import java.util.Map;
026
027 /**
028 * An {@link Invoker} implementation which merely returns null for all method invocations. This class is
029 * useful for scenarios where the "null object" design pattern is needed.
030 *
031 * @author James Carman
032 * @since 1.0
033 */
034 public class NullInvoker implements Invoker, Serializable
035 {
036 //**********************************************************************************************************************
037 // Fields
038 //**********************************************************************************************************************
039
040 private static Map primitiveValueMap = new HashMap();
041
042 //**********************************************************************************************************************
043 // Static Methods
044 //**********************************************************************************************************************
045
046 static
047 {
048 primitiveValueMap.put(Integer.TYPE, new Integer(0));
049 primitiveValueMap.put(Long.TYPE, new Long(0));
050 primitiveValueMap.put(Short.TYPE, new Short(( short ) 0));
051 primitiveValueMap.put(Byte.TYPE, new Byte(( byte ) 0));
052 primitiveValueMap.put(Float.TYPE, new Float(0.0f));
053 primitiveValueMap.put(Double.TYPE, new Double(0.0));
054 primitiveValueMap.put(Character.TYPE, new Character(( char ) 0));
055 primitiveValueMap.put(Boolean.TYPE, Boolean.FALSE);
056 }
057
058 //**********************************************************************************************************************
059 // Invoker Implementation
060 //**********************************************************************************************************************
061
062 public Object invoke( Object proxy, Method method, Object[] args ) throws Throwable
063 {
064 final Class returnType = method.getReturnType();
065 if( returnType.isPrimitive() )
066 {
067 return primitiveValueMap.get(returnType);
068 }
069 else
070 {
071 return null;
072 }
073 }
074 }
075