gpt4 book ai didi

Java - 在不使用直接字段名的情况下访问对象的属性

转载 作者:行者123 更新时间:2023-11-30 07:49:48 25 4
gpt4 key购买 nike

所以对于下面的问题,我试着在网上搜索,但没有找到答案。我正在使用 Java 语言工作。

所以我现在正在上课,假设:

public Employee(String emp_id, String location, String name)
{
this.emp_id = emp_id;
this.location = location;
this.name = name;
}

我创建了多个 Employee 对象,并将其保存在一个 arrayList 中。现在,用户将询问哪些员工位于纽约,或者他们可以询问哪些员工名为 John。

这样他们就可以进入位置纽约。我需要读入用户的请求,首先确定他们要搜索的内容,然后查看数组中是否有任何匹配的 Employees。

我已读入命令,并将其保存在名为 Search 的字符串数组中。第一个索引包含对象的字段/属性的名称,第二个索引将包含用户实际想要检查的内容。

String[] search = new String[] { "location", "New York" }

我正在考虑这样做:

for(Employee e: empList)
if(e.search[0].equals(search[1]))
System.out.println(e)

但是,我无法执行此操作,因为 search[0] 不是 Employee 对象的属性名称。我收到此错误:错误:找不到符号。

有没有办法让我在没有实际名称的情况下访问对象属性,这意味着该名称保存在另一个 String 变量中?

请告诉我。感谢您的帮助。

谢谢。

最佳答案

您正在寻找的是 Reflection API。这是一个简单的示例,说明您可以如何实现您的需求。请注意,我们可以查询类的字段和方法。然后我们可以检查字段类型或方法返回类型。反射不适合胆小的人,但它可以为您提供一些极其动态的代码。

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class Employee {
public String name;
public int age;

public Employee(String name, int age) {
this.name = name;
this.age = age;
}

public String getName() {
return this.name;
}

public int getAge() {
return this.age;
}

public static void main(String[] args) throws Exception {
Employee e1 = new Employee("Nick", 30);

Class<?> c = e1.getClass();
Field f = c.getField("name");

System.out.print("Type: ");
System.out.println(f.getType());
System.out.print("Object: ");
System.out.println(f.get(e1));
System.out.println();

System.out.println("Methods: ");
Method[] methods = c.getMethods();
for(int i = 0; i < methods.length; i++) {
System.out.print("Name: ");
System.out.println(methods[i].getName());
System.out.print("Return type: ");
System.out.println(methods[i].getReturnType());

// imagine this value was set by user input
String property = "name";
if( methods[i].getName().toLowerCase().equals("get" + property) ) {
System.out.print("Value of " + property + " is: ");
System.out.println(methods[i].invoke(e1));
}
}
}
}

关于Java - 在不使用直接字段名的情况下访问对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48285798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com