⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 typeconvertorregistry.java

📁 Bean Scripting Framework (BSF)为在java应用中使用脚本语言
💻 JAVA
字号:
/* * Copyright 2004,2004 The Apache Software Foundation. *  * 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 org.apache.bsf.util.type;import java.awt.Color;import java.awt.Font;import java.util.Hashtable;/** * The <em>TypeConvertorRegistry</em> is the registry of type convertors. * It has lookup and register capabilities based on the types to be * converted as well as by some object key. *  * @author   Sanjiva Weerawarana * @author   Matthew J. Duftler * @see      TypeConvertorRegistry */public class TypeConvertorRegistry {  Hashtable reg = new Hashtable ();  Hashtable keyedReg = new Hashtable ();  // register some standard convertors at construction time  public TypeConvertorRegistry () {	// no-op convertors: cvt from primitive wrappers to the object wrapper	TypeConvertor tc = new TypeConvertor () {	  public Object convert (Class from, Class to, Object obj) {	      return obj;	  }			  public String getCodeGenString() {		return "(Class from, Class to, Object obj) {\n" +			   "return obj;\n" +			   "}";	  }	};	register (Boolean.class, boolean.class, tc);	register (boolean.class, Boolean.class, tc);	register (Byte.class, byte.class, tc);	register (byte.class, Byte.class, tc);	register (Character.class, char.class, tc);	register (char.class, Character.class, tc);	register (Short.class, short.class, tc);	register (short.class, Short.class, tc);	register (Integer.class, int.class, tc);	register (int.class, Integer.class, tc);	register (Long.class, long.class, tc);	register (long.class, Long.class, tc);	register (Float.class, float.class, tc);	register (float.class, Float.class, tc);	register (Double.class, double.class, tc);	register (double.class, Double.class, tc);	// object to string: the registry special cases this one as the backup	// if the target is string and there is no special convertor available	// otherwise	tc = new TypeConvertor () {	  public Object convert (Class from, Class to, Object obj) {	      return (obj == null) ? "(null)" : obj.toString ();	  }				public String getCodeGenString() {		return "(Class from, Class to, Object obj) {\n" +			   "return (obj == null) ? \"(null)\" : obj.toString ();\n" +			   "}";		}	};	register (Object.class, String.class, tc);		// convert strings to various primitives (both their object versions	// and wrappers for primitive versions)	tc = new TypeConvertor () {	  public Object convert (Class from, Class to, Object obj) {		String str = (String) obj;		if (to == Boolean.class || to == boolean.class) {		  return Boolean.valueOf (str);		} else if (to == Byte.class || to == byte.class) {		  return Byte.valueOf (str);		} else if (to == Character.class || to == char.class) {		  return new Character (str.charAt (0));		} else if (to == Short.class || to == short.class) {		  return Short.valueOf (str);		} else if (to == Integer.class || to == int.class) {		  return Integer.valueOf (str);		} else if (to == Long.class || to == long.class) {		  return Long.valueOf (str);		} else if (to == Float.class || to == float.class) {		  return Float.valueOf (str);		} else if (to == Double.class || to == double.class) {		  return Double.valueOf (str);		} else {		  return null;		}	  }				public String getCodeGenString() {		return "(Class from, Class to, Object obj) {\n" +			   "String str = (String) obj;\n" +			   "if (to == Boolean.class || to == boolean.class) {\n" +			   "return Boolean.valueOf (str);\n" +			   "} else if (to == Byte.class || to == byte.class) {\n" +			   "return Byte.valueOf (str);\n" +			   "} else if (to == Character.class || to == char.class) {\n" +			   "return new Character (str.charAt (0));\n" +			   "} else if (to == Short.class || to == short.class) {\n" +			   "return Short.valueOf (str);\n" +			   "} else if (to == Integer.class || to == int.class) {\n" +			   "return Integer.valueOf (str);\n" +			   "} else if (to == Long.class || to == long.class) {\n" +			   "return Long.valueOf (str);\n" +			   "} else if (to == Float.class || to == float.class) {\n" +			   "return Float.valueOf (str);\n" +			   "} else if (to == Double.class || to == double.class) {\n" +			   "return Double.valueOf (str);\n" +			   "} else {\n" +			   "return null;\n" +			   "}\n" +			   "}";	  }	};	register (String.class, boolean.class, tc);	register (String.class, Boolean.class, tc);	register (String.class, byte.class, tc);	register (String.class, Byte.class, tc);	register (String.class, char.class, tc);	register (String.class, Character.class, tc);	register (String.class, short.class, tc);	register (String.class, Short.class, tc);	register (String.class, int.class, tc);	register (String.class, Integer.class, tc);	register (String.class, long.class, tc);	register (String.class, Long.class, tc);	register (String.class, float.class, tc);	register (String.class, Float.class, tc);	register (String.class, double.class, tc);	register (String.class, Double.class, tc);	// strings to fonts	tc = new TypeConvertor () {	  public Object convert (Class from, Class to, Object obj) {	      return Font.decode ((String) obj);	  }			  public String getCodeGenString() {		return "(Class from, Class to, Object obj) {\n" +			   "return Font.decode ((String) obj);\n" +			   "}";	  }	};	register (String.class, Font.class, tc);	// strings to colors	tc = new TypeConvertor () {	  public Object convert (Class from, Class to, Object obj) {	      return Color.decode ((String) obj);	  }				public String getCodeGenString() {		return "(Class from, Class to, Object obj) {\n" +			   "return Color.decode ((String) obj);\n" +			   "}";		}	};	register (String.class, Color.class, tc);  }  // lookup a convertor  public TypeConvertor lookup (Class from, Class to) {	String key = from.getName () + " -> " + to.getName ();	TypeConvertor tc = (TypeConvertor) reg.get (key);	if (tc == null) {	  if (from != void.class		  && from != Void.class		  && to == String.class) {		// find the object -> string convertor		return lookup (Object.class, String.class);	  }	}	return tc;  }  // lookup a convertor by key  public TypeConvertor lookupByKey (Object key) {	return (TypeConvertor) keyedReg.get (key);  }  // register a convertor  public void register (Class from, Class to, TypeConvertor convertor) {	String key = from.getName () + " -> " + to.getName ();	reg.put (key, convertor);  }  // register a convertor by key  public void registerByKey (Object key, TypeConvertor convertor) {	keyedReg.put (key, convertor);  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -