Java I';我想用类中的方法设置和获取实例属性

Java I';我想用类中的方法设置和获取实例属性,java,class,Java,Class,我是Java的初学者。我有个问题 Foo.java public class Foo { private String name; private int num; Foo(String name, int num) { this.name = name; this.num = num; } public String getName() { return this.name; } pu

我是Java的初学者。我有个问题

Foo.java

public class Foo {
    private String name;
    private int num;

    Foo(String name, int num) {
        this.name = name;
        this.num = num;
    }

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

    public int getNum() {
        return this.num;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setNum(int num) {
        this.num = num;
    }

}
Main.java

public class Main {
    public static void main(String[] args) {
        String name = "Tom";
        int num = 60;
        Foo bar = new Foo(name, num);
    }
}
我想用
getter()
setter()
方法来设置和获取实例属性,而不是Java上这种典型的类样式

public void setter(String p) {
    this.p = p;
}

public String getter(String q) {
    return this.q
} 
我知道这些方法不起作用,但我想编写Java方法,就像在
Python
中遵循这些代码一样

setattr(self, key, val)
getattr(self, key)

您能给我一些建议吗?

您想要实现的目标可以使用反射来实现,如下所示:

// get the field "key" from the class "Foo"
Field field = Foo.class.getField("key");
// make it accessible as it is a private field
field.setAccessible(true);
// set the value of this field to val on the instance self
field.set(self, val);
有关反射的更多详细信息

Java不支持属性。 唯一的方法是通过访问器mutator(get/set)方法,就像您在顶部所做的那样


请参阅:

是否要向
setter
方法输入任何值?能否解释原因,或者为什么不使用java标准?可以使用反射API编写按名称查找字段的通用getter和setter方法。但在你的情况下,这是个坏主意,你会遇到类型问题。所以,如果您想编写java代码,我建议您坚持使用java代码标准。@Kevin谢谢您的评论。我想在构造函数中使用
setter
,因为我不想编写每个属性,即使我创建了一个实例,比如
foobar=newfoo(name,num)。哈哈,我可以在
Python
PHP
Go
中实现代码,所以我通常在构造函数中使用
setter()
。@ArcticLord感谢您的评论。我查看了有关反射的信息。在某些网页中,他们不建议使用
反射
。也许我必须遵循Java的标准方式。答案有点粗糙,需要去检查相关的问题,同时主要是正确的:Java不提供通过静态方法访问实例变量的功能。谢谢Brandon。这就是为什么我在搜索时找不到日语信息的原因。谢谢你的链接。谢谢你的评论,里德尔。我明白了,谢谢你,尼古拉斯。我不知道关于反射的事。我检查并了解了这一点。谢谢