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

📄 tostringgenerator.java

📁 一个用java写的地震分析软件(无源码)-used to write a seismic analysis software (without source)
💻 JAVA
字号:
package org.trinet.util;

import java.lang.reflect.*;

/**

 * This class SHOULD only be used as an inner class of another class as otherwise it 

 * will NOT provide the required functionality. Make sure the parent class also imports the  * java.lang.reflect.* package.

 * Creation date: (8/17/00 1:11:45 PM)

 * @author: Syed Fareed Ahmad

http://www.javaworld.com/javaworld/javatips/jw-javatip99.html
 */

public class ToStringGenerator {



public ToStringGenerator() {}

private int calculateDimensions(Class c)

{

	int dims = 0;

	while (c.isArray())

	{

		dims++;

		c = c.getComponentType();

	}

	return dims;

}

public String generateToString(Object parent)

{

	Field[] fields = parent.getClass().getDeclaredFields();

	Class cSuper = parent.getClass().getSuperclass();

	if (fields.length == 0 && cSuper == Object.class)

		return "The class has no attributes";

	StringBuffer buffer = new StringBuffer();

	buffer.append(parent.getClass().getName());

	buffer.append(" [");

	buffer.append(cSuper.getName());

	buffer.append("]" + System.getProperty("line.separator"));

	if (cSuper != Object.class)

		buffer.append(super.toString()); // Apending the toString of the super class



	for (int i = 0; i < fields.length; i++)

	{

		if (fields[i].getType().isPrimitive())

		{

			buffer.append(System.getProperty("line.separator") + getPrimitiveFieldData(fields[i], parent));

		}

		else

		{

			if (fields[i].getType().isArray())

			{

				int dimensions = calculateDimensions(fields[i].getType());

				if (dimensions > 1)

				{

					buffer.append(System.getProperty("line.separator") + "The Attribute namely '" + fields[i].getName() + "' has more than one dimension that is not supported by this code!");

				}

				else

					if (fields[i].getType().getComponentType().isPrimitive())

					{

						buffer.append(System.getProperty("line.separator") + getPrimitiveArrayFieldData(fields[i], parent));

					}

					else

					{

						buffer.append(System.getProperty("line.separator") + getNonPrimitiveArrayFieldData(fields[i], parent));

					}

			}

			else

			{

				buffer.append(System.getProperty("line.separator") + getNonPrimitiveFieldData(fields[i], parent));

			}

		}

	} // End of For Loop

	return buffer.toString();

}

private String getNonPrimitiveArrayFieldData(Field field, Object parent)

{

	StringBuffer output = new StringBuffer();

	output.append(field.getName() + "[] :: Length = ");

	try

	{

		Object value = field.get(parent);

		Object[] values = null;

		values = (Object[]) value;

		output.append(values.length);

		for (int i = 0; i < values.length; i++)

		{

			output.append(System.getProperty("line.separator"));

			output.append(field.getName() + "[" + i + "] :- " + values[i].toString());

		}

	}

	catch (IllegalAccessException exception)

	{

		output.append("*Access denied*");

	}

	return output.toString();

}

private String getNonPrimitiveFieldData(Field field, Object parent)

{

	StringBuffer output = new StringBuffer();

	output.append(field.getName() + " :- ");

	try

	{

		Object value = field.get(parent);

		output.append(value.toString());

	}

	catch (IllegalAccessException exception)

	{

		output.append("*Access denied*");

	}

	return output.toString();

}

private String getPrimitiveArrayFieldData(Field field, Object parent)

{

	StringBuffer output = new StringBuffer();

	output.append(field.getName() + "[] :: Length = ");

	try

	{

		Object value = field.get(parent);

		int aLength = 0;

		Object[] values = null;

		char primitiveTypeIdentifier = field.getType().getComponentType().toString().charAt(0);

		char extraPrimitiveTypeIdentifier = field.getType().getComponentType().toString().charAt(1);

		switch (primitiveTypeIdentifier)

		{

			case 'f' :

				float[] fValues = (float[]) value;

				aLength = fValues.length;

				values = new Object[aLength];

				for (int i = 0; i < fValues.length; i++)

					values[i] = new Float(fValues[i]);

				break;

			case 'i' :

				int[] iValues = (int[]) value;

				aLength = iValues.length;

				values = new Object[aLength];

				for (int i = 0; i < iValues.length; i++)

					values[i] = new Integer(iValues[i]);

				break;

			case 'd' :

				double[] dValues = (double[]) value;

				aLength = dValues.length;

				values = new Object[aLength];

				for (int i = 0; i < dValues.length; i++)

					values[i] = new Double(dValues[i]);

				break;

			case 's' :

				short[] sValues = (short[]) value;

				aLength = sValues.length;

				values = new Object[aLength];

				for (int i = 0; i < sValues.length; i++)

					values[i] = new Short(sValues[i]);

				break;

			case 'b' :

				if (extraPrimitiveTypeIdentifier == 'o')

				{

					boolean[] bValues = (boolean[]) value;

					aLength = bValues.length;

					values = new Object[aLength];

					for (int i = 0; i < bValues.length; i++)

						values[i] = new Boolean(bValues[i]);

				}

				else

				{

					byte[] bValues = (byte[]) value;

					aLength = bValues.length;

					values = new Object[aLength];

					for (int i = 0; i < bValues.length; i++)

						values[i] = new Byte(bValues[i]);

				}

				break;

			case 'l' :

				long[] lValues = (long[]) value;

				aLength = lValues.length;

				values = new Object[aLength];

				for (int i = 0; i < lValues.length; i++)

					values[i] = new Long(lValues[i]);

				break;

			case 'c' :

				char[] cValues = (char[]) value;

				aLength = cValues.length;

				values = new Object[aLength];

				for (int i = 0; i < cValues.length; i++)

					values[i] = new Character(cValues[i]);

				break;

			default :

				output.append("*Invalid primitive type*");

				break;

		} // End of Switch



		output.append(aLength);

		for (int i = 0; i < values.length; i++)

		{

			output.append(System.getProperty("line.separator"));

			output.append(field.getName() + "[" + i + "] = " + values[i].toString());

		}

	}

	catch (IllegalAccessException exception)

	{

		output.append("*Access denied*");

	}

	return output.toString();

}

private String getPrimitiveFieldData(Field field, Object parent)

{

	StringBuffer output = new StringBuffer();

	output.append(field.getName() + " = ");

	try

	{

		Object value = field.get(parent);

		output.append(value.toString());

	}

	catch (IllegalAccessException exception)

	{

		output.append("*Access denied*");

	}

	return output.toString();

}

}

⌨️ 快捷键说明

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