【问题标题】:Java: Add a Class Property DynamicallyJava:动态添加类属性
【发布时间】:2017-01-13 01:39:16
【问题描述】:

我对 Java 比较陌生,并且研究过反射功能,但由于某种原因无法弄清楚以下内容:

我需要获取实例化类的字符串名称。似乎我找不到通过反射来做到这一点的方法,所以我想动态添加一个类属性,该属性将包含类名称作为字符串。

我该怎么做?

另外,我想在类中创建一个公共字符串属性,我在构造函数中分配实例化类的名称。也没有真正弄清楚如何做到这一点。

【问题讨论】:

  • 为什么不直接使用instance.getClass().getName()
  • 谢谢,乔恩。想到了这一点,但这会返回类的名称而不是实例化的名称。我确定我混淆了术语。类:org.myapp.MyClass 实例:MyClass myNewClass = new MyClass():我需要的是 myNewClass 的字符串。
  • 你的用例是什么?
  • 哦,我明白了,这些信息并不总是可用的(不过,java 8 有一个特殊的编译器选项。)。它不能通过引用本身获得,而是通过声明的类或方法获得。
  • 需要使用 Selenide/Selenium 遍历一堆 HTML 页面输入字段。我正在从配置文件中读取字段列表,并使用配置文件中的字段名称创建表单字段类。因此,每个字段都有自己的类。我需要稍后获取字段名称以进行设置,而无需静态指定字段名称。希望这是有道理的。

标签: java dynamic reflection properties


【解决方案1】:

如果您想要 Jorn Vernee 评论的类名,您可以使用 instance.getClass().getName()

既然你提到动态创建一个字符串,我猜你的意思可能是你想要对象本身的名称。获取对象名称的最简单方法是构造对象并将名称传递给构造函数以初始化成员字符串。

有点像

public class Enemy
{
    private String name;

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

Enemy orc = new Enemy("orc"); // could be an array of references instead of a var
orc.getName(); // returns the name of the object, obviously the name is whatever you construct the object with; so you could use any object identifier you like (such as a hash), this also means you can just construct the object and store its reference in an array 

【讨论】:

  • 谢谢,乔治。乔恩的建议绝对给了我班级的名字。我希望得到的是对象的名称。您的解决方案有效,尽管我必须传递我正在创建的对象的名称,这是我希望避免的额外步骤。 :-) 这听起来可能很傻,但是要获得实例化对象的名称,我很惊讶在 Java 中没有更直接的方法。我认为反射可能是答案,但我还没有看到任何属性获取器或方法来这样做。再说一次,我是这门语言的新手,所以请原谅 Java 工作原理的新手方法。
猜你喜欢
  • 1970-01-01
  • 2019-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-04
  • 1970-01-01
相关资源
最近更新 更多