Java I';我想用类中的方法设置和获取实例属性
我是Java的初学者。我有个问题 Foo.javaJava 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
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。这就是为什么我在搜索时找不到日语信息的原因。谢谢你的链接。谢谢你的评论,里德尔。我明白了,谢谢你,尼古拉斯。我不知道关于反射的事。我检查并了解了这一点。谢谢