如何获取java类中的属性数?

我有一个java类,包含数据库表的所有列作为属性(成员变量)和相应的getter和setter。

我想在这个类中有一个名为getColumnCount()的方法,它返回列数(即类中的属性数)? 如果不对数字进行硬编码,我将如何实现? 我对这方面的批评和建议持开放态度。 谢谢。

检查reflectionAPI 。 如果有问题的类实际上是 Javabean,您可以获得字段数(您调用它的属性或列),如下所示:

 public int getColumnCount() { return getClass().getDeclaredFields().length; } 

然而,我非常怀疑这一点的必要性。 如果您详细说明您认为需要此方法/解决方案的function要求,那么我们可以提出更好的方法。

一种方法是使用reflection来列出类的方法,并计算其名称与正则表达式“ ^set.+$ ”匹配的方法。

制作一个类似“DatabaseColumn”的注释,使用哪些字段映射到表列。 您可以对字段或getter方法使用注释。 所以对于数据库表中没有使用的瞬态字段是安全的。

 // in this sample annotation used for getter methods public int getColumnCount() { int count = 0; Method[] methods = getClass().getDeclaredMethods(); for (Method method : methods) { if (method.isAnnotationPresent(DatabaseColumn.class)) { count++; } } return count; } 

我曾经和你一样有着相同的目的,然后用Javareflection技术来解决这个问题。

猜猜我可以帮到你。

 /** * author: Amo * to use auto-gen SQL create command to create a table having columns named same as the name of model fields */ public void setSQLCreateCmd(Class clazz) { Field[] fields = clazz.getDeclaredFields(); String fieldName; Class fieldType; int fieldCount = fields.length; Log.d("[DEBUG]", "... fieldCount:" + fieldCount); int i = 0; DATABASE_CMD = "create table if not exists " + DATABASE_NAME + "(" + "_id integer primary key autoincrement, "; for (Field field : fields) { if (!field.isAccessible()) field.setAccessible(true); fieldName = field.getName(); fieldType = field.getType(); if (fieldName.compareTo("") == 0) { Logger.d("!!! field name is empty"); continue; } if (i == fieldCount - 1) { Logger.d("... field at " + (i+1) + "named " + fieldName); if (fieldType.equals(String.class)) DATABASE_CMD += fieldName + " text" + ")"; else if (fieldType.equals(int.class) || fieldType.equals(Integer.class)) DATABASE_CMD += fieldName + " integer" + ")"; } else { Logger.d("... field at " + (i+1) + "named " + fieldName); if (fieldType.equals(String.class)) DATABASE_CMD += fieldName + " text" + ","; else if (fieldType.equals(int.class) || fieldType.equals(Integer.class)) DATABASE_CMD += fieldName + " integer" + ","; } i++; } /** * fixes fieldCount is not as same as the defined */ StringBuilder stringBuilder = new StringBuilder(DATABASE_CMD); stringBuilder.setCharAt(stringBuilder.lastIndexOf(","), ')'); DATABASE_CMD = stringBuilder.toString(); Log.d("[DEBUG]", "... now sql cmd is " + DATABASE_CMD); Logger.d("... now sql cmd is " + DATABASE_CMD); } 

任何评论都是欢迎和愉快的编码。