如何动态循环java中的类属性.
How can I loop over a class attributes in java dynamically.
例如:
public class MyClass{
private type1 att1;
private type2 att2;
...
public void function(){
for(var in MyClass.Attributes){
System.out.println(var.class);
}
}
}
这在 Java 中可行吗?
is this possible in Java?
没有语言支持可以满足您的要求.
There is no linguistic support to do what you're asking for.
您可以在运行时使用反射(例如,使用 Class.getDeclaredFields() 获取 Field),但取决于你想要做什么,这可能不是最好的解决方案.
You can reflectively access the members of a type at run-time using reflection (e.g. with Class.getDeclaredFields() to get an array of Field), but depending on what you're trying to do, this may not be the best solution.
这是一个简单的示例,仅展示反射的部分功能.
Here's a simple example to show only some of what reflection is capable of doing.
import java.lang.reflect.*;
public class DumpFields {
public static void main(String[] args) {
inspect(String.class);
}
static <T> void inspect(Class<T> klazz) {
Field[] fields = klazz.getDeclaredFields();
System.out.printf("%d fields:%n", fields.length);
for (Field field : fields) {
System.out.printf("%s %s %s%n",
Modifier.toString(field.getModifiers()),
field.getType().getSimpleName(),
field.getName()
);
}
}
}
上面的代码片段使用反射来检查 class String 的所有声明的字段;它产生以下输出:
The above snippet uses reflection to inspect all the declared fields of class String; it produces the following output:
7 fields:
private final char[] value
private final int offset
private final int count
private int hash
private static final long serialVersionUID
private static final ObjectStreamField[] serialPersistentFields
public static final Comparator CASE_INSENSITIVE_ORDER
以下是本书的节选:
These are excerpts from the book:
给定一个 Class 对象,可以获取 构造函数,方法和Field 实例表示类的构造函数、方法和字段.[它们] 让您反思地操纵它们的底层对应物.然而,这种力量是有代价的:
Given a
Classobject, you can obtainConstructor,Method, andFieldinstances representing the constructors, methods and fields of the class. [They] let you manipulate their underlying counterparts reflectively. This power, however, comes at a price:
作为一项规则,对象不应在运行时在正常应用程序中进行反射访问.
As a rule, objects should not be accessed reflectively in normal applications at runtime.
有一些复杂的应用程序需要反射.示例包括[...故意省略...]如果您对您的应用程序是否属于这些类别之一有任何疑问,它可能不属于.
There are a few sophisticated applications that require reflection. Examples include [...omitted on purpose...] If you have any doubts as to whether your application falls into one of these categories, it probably doesn't.
这篇关于如何在Java中循环一个类属性?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!
如何检测 32 位 int 上的整数溢出?How can I detect integer overflow on 32 bits int?(如何检测 32 位 int 上的整数溢出?)
return 语句之前的局部变量,这有关系吗?Local variables before return statements, does it matter?(return 语句之前的局部变量,这有关系吗?)
如何将整数转换为整数?How to convert Integer to int?(如何将整数转换为整数?)
如何在给定范围内创建一个随机打乱数字的 intHow do I create an int array with randomly shuffled numbers in a given range(如何在给定范围内创建一个随机打乱数字的 int 数组)
java的行为不一致==Inconsistent behavior on java#39;s ==(java的行为不一致==)
为什么 Java 能够将 0xff000000 存储为 int?Why is Java able to store 0xff000000 as an int?(为什么 Java 能够将 0xff000000 存储为 int?)