`
blaiu
  • 浏览: 131107 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

动态获取字段名或方法

    博客分类:
  • Java
阅读更多
public interface Adapter<T> {

	public abstract void setBean(T bean);

	public abstract T getBean();

	public abstract Method[] getBeanMethods();

	public abstract Field[] getBeanFields();

	public abstract Object invoke(Method m, Object... args);

	public abstract List getBeanGetterMethodList();

	public abstract List getBeanSetterMethodList();

	public abstract void process();
	
	public Excessive process(String getID,String getTitle);
	
	
}


public abstract class AbstractAdapter<T> implements Adapter<T> {

	protected T bean;
	
	private List<BeanProperties> beanGetterMethodList = null;

	private List<BeanProperties> beanSetterMethodList = null;


	public AbstractAdapter(T bean) {
	   this.bean = bean;
	}


	public Method[] getBeanMethods() {
	   return bean.getClass().getDeclaredMethods();
	}


	public Field[] getBeanFields() {
	   return bean.getClass().getDeclaredFields();
	}


	public Object invoke(Method m, Object... args) {
	   try {
	    return m.invoke(bean, args);
	   } catch (InvocationTargetException ite) {
	    ite.printStackTrace();
	    return null;
	   } catch (IllegalAccessException iae) {
	    iae.printStackTrace();
	    return null;
	   }
	}


	private void fillGetterMethod() {
	   for (Method m : getBeanMethods()) {
	    if (m.getName().startsWith("get")) {
	     try {
	      BeanProperties bp = new BeanProperties();
	      bp.setMethod(bean.getClass().getMethod(m.getName(), null));
	      bp.setMethodName(m.getName());
	      bp.setReturnType(m.getReturnType());
	      bp.setFieldType(m.getReturnType());
 	      beanGetterMethodList.add(bp);
	     } catch (NoSuchMethodException e) {
	      e.printStackTrace();
	     }
	    }
	   }
	}


	public List getBeanGetterMethodList() {
	   if (beanGetterMethodList == null) {
	    beanGetterMethodList = new ArrayList<BeanProperties>();
	    fillGetterMethod();
	   }
	   return beanGetterMethodList;
	}


	private void filSetterMethod() {
	   for (Field f : getBeanFields()) {
	    try {
	     BeanProperties bp = new BeanProperties();
	     bp.setMethodName("set" + firstWordToUpper(f.getName()));
	     bp.setMethod(getBean().getClass().getMethod(bp.getMethodName(),
	       f.getType()));
	     bp.setReturnType(null);
	     bp.setFieldType(f.getType());
	     beanSetterMethodList.add(bp);
	    } catch (NoSuchMethodException e) {
	     e.printStackTrace();
	    }
	   }
	}


	private String firstWordToUpper(String word) {
	   String first = word.substring(0, 1);
	   return first.toUpperCase() + word.substring(1);
	}


	public List getBeanSetterMethodList() {
	   if (beanSetterMethodList == null) {
	    beanSetterMethodList = new ArrayList<BeanProperties>();
	    filSetterMethod();
	   }
	   return beanSetterMethodList;
	}


	public void setBean(T bean) {
	   this.bean = bean;
	}


	public T getBean() {
	   return bean;
	}
}


public class AdapterTest<T> extends AbstractAdapter<T> {
	public AdapterTest(T bean) {
		super(bean);
	}

	public void process() {
		List list = getBeanGetterMethodList();
		Iterator it = list.iterator();
		while (it.hasNext()) {
			BeanProperties bp = (BeanProperties) it.next();
			
		}
		it = getBeanSetterMethodList().iterator();
		while (it.hasNext()) {
			BeanProperties bp = (BeanProperties) it.next();
			if (bp.getFieldType().getName().endsWith("int"))
				
			if (bp.getFieldType().getName().endsWith("String"))
				
		}
		it = list.iterator();
		while (it.hasNext()) {
			BeanProperties bp = (BeanProperties) it.next();
			try {
				Object test = invoke(bp.getMethod(), null);
				
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

	public Excessive process(String getID, String getTitle) {
		List list = getBeanGetterMethodList();
		Iterator it = list.iterator();
		Excessive ex = new Excessive();
		try {
			while (it.hasNext()) {
				BeanProperties bp = (BeanProperties) it.next();
				if (bp.getMethodName().equals(getID)) {
					ex.setExID(invoke(bp.getMethod(), null).toString());
				}
				if (bp.getMethodName().equals(getTitle)) {
					ex.setTitle(invoke(bp.getMethod(), null).toString());
				}
			}
			return ex;
		} catch (Exception e) {
			return ex;
		}
	}

}


public class BeanProperties {

private Class returnType;

private Method method;

private String methodName;

private Class fieldType;

public Method getMethod() {
   return method;
}

public void setMethod(Method method) {
   this.method = method;
}

public String getMethodName() {
   return methodName;
}

public void setMethodName(String methodName) {
   this.methodName = methodName;
}

public Class getReturnType() {
   return returnType;
}

public void setReturnType(Class returnType) {
   this.returnType = returnType;
}

public Class getFieldType() {
   return fieldType;
}

public void setFieldType(Class fieldType) {
   this.fieldType = fieldType;
}
}


public class Excessive implements java.io.Serializable{
  
	private static final long serialVersionUID = 1L;
    private String exID;
    private String title;

	public String getExID() {
		return exID;
	}

	public void setExID(String exID) {
		this.exID = exID;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}
}


public List getBusinessTypeList(HttpServletRequest request) {
		String language = request.getLocale().toString().split("_")[0];
		language = language.substring(0, 1).toUpperCase()+language.substring(1);
		String HQL ="from HoDictionary hod where hod.dictId=8";
		List list = queryByHQL(HQL);
		List li = new ArrayList();
		AdapterTest hod = null;
		for(int i=0; i<list.size(); i++ ){
			try{
				HoDictionary code = (HoDictionary)list.get(i);
				  hod = new AdapterTest(code);
			}catch(Exception e){
				break;
			}
			Excessive ss = hod.process("getLemmaId", "get"+language+"Lemma");
			li.add(ss);
		}
		return li;
	}

分享到:
评论

相关推荐

    根据javabean动态获取字段以及中文名称

    javabean中有100个属性字段,想要在前端页面获取这100个字段和字段对应的中文名称,如用户名称(username),密码(password),可以动态的获取到中文名称和属性字段,并返回前端页面,本例只实现动态解析功能

    java如何获得数据库表中各字段的字段名

    6. **获取字段名并存储数据**: ```java for (int i = 1; i (); i++) { String columnName = metaData.getColumnName(i); System.out.println(columnName); row.put(columnName, resultSet.getObject(i)); } ...

    PostgreSQL获取表名和字段名

    在PostgreSQL数据库管理系统中,获取表名和字段名是数据库管理员和开发人员日常工作中常见的任务。这有助于了解数据库结构,进行数据操作、查询优化或设计新的应用程序。以下是一些关于如何在PostgreSQL中获取这些...

    获取数据库表名和字段名.rar

    3. 获取字段名: - SQL查询:对于特定表,可以使用`DESCRIBE table_name;`(MySQL)或`SELECT * FROM information_schema.columns WHERE table_name='your_table';`(大多数数据库系统)来获取表的字段信息。 - ...

    VC 获取数据库字段名(Access).rar

    具体到获取字段名,我们首先需要建立一个Connection对象,使用适当的连接字符串来连接到Access数据库。连接字符串通常包括数据库的路径、驱动类型(如“Microsoft.Jet.OLEDB.4.0”)以及数据库用户名和密码(如果...

    VS2005下动态配置数据源、获取表名及字段名

    获取字段名则需要针对每个表单独进行。我们可以通过表名创建一个`SqlCommand`对象,然后执行SQL查询(如`SELECT * FROM TableName`)来获取`SqlDataReader`,从中读取列信息。但更常见的是,我们再次调用`GetSchema`...

    matlab开发-以递归方式获取结构字段名

    这正是`fieldnamesr`函数在描述中所提及的功能——递归地获取结构体的所有字段名,包括其子结构的字段名。 递归是一种解决问题的方法,它通过调用自身来解决子问题。在MATLAB中,递归可以用于遍历层次结构,如遍历...

    Java8通过Function获取字段名的步骤

    Java8通过Function获取字段名的步骤 Java8通过Function获取字段名是指在Java8中使用Function函数式编程来获取Java对象的字段名。这个步骤主要解决了硬编码的问题,效果类似于MyBatis-Plus的LambdaQueryWrapper。 ...

    VB_读取ACCESS数据库中所有表名及指定表的字段名.doc

    VB 读取 ACCESS 数据库中所有表名及指定表的字段名 VB 是一款功能强大的编程语言,可以用于读取 ACCESS 数据库中的所有表名和指定表的字段名。下面将详细介绍如何使用 VB 读取 ACCESS 数据库中的所有表名和指定表的...

    数据库字段名转换成Java字段名

    - 开发者可以使用一些工具,如在线转换器或IDE插件,快速将数据库字段名转换为Java字段名。 - IntelliJ IDEA、Eclipse等集成开发环境(IDE)内置了一些功能,可以自动调整命名风格。 4. **编程实现**: - 自定义...

    C# 作的动态定义数据库字段

    例如,可以创建一个`DatabaseField`特性,包含字段名和数据类型等信息。 反射则允许程序在运行时检查自身,包括查找和调用类型、方法和属性。通过反射,我们可以在运行时读取这些元数据,从而动态地创建SQL语句来...

    易语言ADO修改字段名

    3. **获取字段信息**:在记录集中,可以使用`字段`命令获取特定字段的信息。如`.字段("旧字段名").名称`会返回旧字段名。 4. **修改字段名**:在ADO中,不能直接修改字段名,但可以通过以下步骤实现: - 先创建一...

    C#获得SQLServer服务器名、数据库名、表名、以及字段名的方法归类.pdf

    下面是获取字段名的代码: ```csharp public List&lt;string&gt; GetColumns(string connection, string tablename) { List&lt;string&gt; columnlist = new List(); SqlConnection objConnetion = new SqlConnection...

    access VBA获取字段的数据类型_accessVBA获取字段的数据类型_

    要获取表字段的数据类型,你需要使用DAO(Data Access Objects)或ADODB(ActiveX Data Objects)库。DAO是Access内置的对象模型,而ADODB则更通用,适用于多种数据库环境。在这里,我们将主要讨论使用DAO的方法。 ...

    任意数据库连接、表、字段名获取

    - 构建SQL查询语句,用于获取表名或字段名。 - 使用SqlCommand执行查询,并通过SqlDataReader读取结果。 - 将结果处理为DataTable,方便进一步操作,例如显示在界面上。 - 关闭连接以释放资源。 在"DBACESS"中,...

    asp获取数据库表名、库名、字段名的方法.doc

    asp获取数据库表名、库名、字段名的方法.doc

    Mybatis动态调用表名和字段名的解决方法

    本文将深入探讨如何在Mybatis中实现动态调用表名和字段名。 首先,了解Mybatis中两种参数占位符的区别:`#{}`和`${}`。`#{}`被解析为预编译语句(PreparedStatement)的参数标记符,比如`#{name}`会被解析为`?`,这...

    Sql Server获取SQL所有数据库名、所有表名、所有字段名.docx

    Sql Server 获取 SQL 所有数据库名、所有表名、所有字段名 Sql Server 是一种关系...Sql Server 提供了多种方法来获取数据库中的各种信息,包括数据库名、表名、字段名等。这些信息对于数据库的维护和管理非常重要。

    php获取字段名示例分享

    在PHP中,获取数据库表的字段名是一项常见...在mysqli中,你可以使用`mysqli_fetch_field_direct()`函数来获取字段名,而在PDO中,你可以使用`PDOStatement::getColumnMeta()`方法。这两个方法都是更安全和推荐的选择。

    C# List OrderBy 动态多字段排序

    假设我们有一个字符串数组`fieldNames`,其中包含了我们需要排序的字段名,我们可以构建一个动态排序的函数: ```csharp public static List&lt;T&gt; DynamicOrderBy(List&lt;T&gt; list, string[] fieldNames) { var ...

Global site tag (gtag.js) - Google Analytics