英文:
how to set the values for a public static final class instance in java
问题
public static final class MyClass{
private long id_;
public static final int MEMBER_ID_FIELD_NUMBER = 2;
private long startDate_;
....
}
//meanwhile in another class
class Abc {
...
public final void aFunc {
MyClass aaa = ???? // here is what I want to know how to set the class values
....
}
}
如何在另一个类中为MyClass
设置值?我尝试进行“初始化”操作,就像这样:
MyClass aaa = {
id_: 123123132,...
};
但是它只是给我一个“无法解析符号id_”的错误。我来自JavaScript背景,所以我这样想。有任何方法可以为public static final class
的实例初始化部分/全部自定义默认值吗?顺便说一下,如果背景故事有助于获取全面的情况 --- 我这样做是为了测试特定类的方法,该方法包括MyClass
的实例。这是一种尝试,通过模拟这些值,而不必重新创建整个ActionBean来测试一个方法。
英文:
example
public static final class MyClass{
private long id_;
public static final int MEMBER_ID_FIELD_NUMBER = 2;
private long startDate_;
....
}
//meanwhile in another class
class Abc {
...
public final void aFunc {
MyClass aaa = ???? // here is what I want to know how to set the class values
....
}
}
How can I set the value for MyClass
in the other class? I tried to do "initialize" like
MyClass aaa = {
id_: 123123132,...
};
it just give me error that id_ `can't resolve symbol.
I come from javascript background, that's why I think like this. Any idea how can I initiate the instance with partial / all custom default values for a public static final class
? Btw, if the back-story can help get a full picture --- I do this for testing a specific class's method which is including an instance of MyClass
. This is an attempt to mock the values instead having to recreate a whole ActionBean to just test one method.
答案1
得分: 1
如果它有默认构造函数(即没有任何参数的构造函数),您可以首先创建对象,而无需提供字段值,然后使用设置器(如果存在)进行设置,如下所示:
public final void aFunc {
MyClass aaa = new MyClass();
a.setId_(1);
...
}
如果它没有默认构造函数,则需要在对象创建过程中提供所有参数,如下所示:
public final void aFunc {
MyClass aaa = new MyClass(1,2,3);
....
}
英文:
If it has default constructor (the one without any argument) you can first create object without providing fields values and the set it with setters (if they exist) like so:
public final void aFunc {
MyClass aaa = new MyClass();
a.setId_(1);
...
}
If it doesn't have default constructor you need to provide all parameters during object creation, like so:
public final void aFunc {
MyClass aaa = new MyClass(1,2,3);
....
}
答案2
得分: 1
有多种方法可以创建对象实例并为字段赋值:
-
调用setter方法:
public static final class MyClass { private long id_; public void setId(long id) { this.id_ = id; } }
MyClass aaa = new MyClass(); aaa.setId(123123132);
-
使用带参数的构造函数:
public static final class MyClass { private long id_; public MyClass(long id) { this.id_ = id; } }
MyClass aaa = new MyClass(123123132);
-
使用公共字段。虽然不推荐,但类似于JavaScript的做法:
public static final class MyClass { public long id_; }
MyClass aaa = new MyClass(); aaa.id_ = 123123132;
-
使用构建器(Builder):
public static final class MyClass { private long id_; private MyClass(long id) { this.id_ = id; } public static class Builder { private long id_; public void id(long id) { this.id_ = id; } public MyClass build() { MyClass x = new MyClass(); x.id_ = this.id_; return x; } } }
MyClass aaa = new MyClass.Builder() .id(123123132) .build();
英文:
There are multiple ways to create an object instance and assign values to fields:
-
Call setter methods:
public static final class MyClass { private long id_; public void setId(long id) { this.id_ = id; } }
MyClass aaa = new MyClass(); aaa.setId(123123132);
-
Use a constructor with arguments:
public static final class MyClass { private long id_; public MyClass(long id) { this.id_ = id; } }
MyClass aaa = new MyClass(123123132);
-
Use public fields. Although not recommended, this is what JavaScript kind of does:
public static final class MyClass { public long id_; }
MyClass aaa = new MyClass(); aaa.id_ = 123123132;
-
Use a builder:
public static final class MyClass { private long id_; private MyClass(long id) { this.id_ = id; } public static class Builder { private long id_; public void id(long id) { this.id_ = id; } public MyClass build() { MyClass x = new MyClass(); x.id_ = this.id_; return x; } } }
MyClass aaa = new MyClass.Builder() .id(123123132) .build();
答案3
得分: 1
你有两个选项来填充字段的值。
一个选项是使用公共构造函数传递所有要更新的参数:
public static final class MyClass{
private long id_;
public static final int MEMBER_ID_FIELD_NUMBER = 2;
private long startDate_;
public MyClass(long id_, long startDate_) {
this.id_ = id_;
this.startDate_ = startDate_;
}
}
你可以按以下方式使用它:
public final void aFunc {
MyClass objectA = new MyClass(1L, 23214112213L);
}
第二个选项是使用设置器:为每个字段添加值的方法:
public static final class MyClass{
private long id_;
public static final int MEMBER_ID_FIELD_NUMBER = 2;
private long startDate_;
public void setID(long id_) {
this.id_ = id_;
}
public void setStartDate(long startDate_) {
this.startDate_ = startDate_;
}
}
你可以按以下方式使用它们:
public final void aFunc {
MyClass objectB = new MyClass();
objectB.setID(1L);
objectB.setStartDate(23214112213L);
}
但你也可以将它们结合起来。你可以有构造函数,然后是设置器。
- 对于你的私有字段,我假设你也需要获取器。
这些是你应该掌握的基础知识的一部分。另外要记住有一些约定(命名等)。
英文:
You have two options in order to fill the fields with values.
One options is using the public constructor passing all the parameters you want to update:
public static final class MyClass{
private long id_;
public static final int MEMBER_ID_FIELD_NUMBER = 2;
private long startDate_;
public MyClass(long id_, long startDate_) {
this.id_ = id_;
this.startDate_ = startDate_;
}
}
You can use it as bellow:
public final void aFunc {
MyClass objectA = new MyClass(1L, 23214112213L);
}
Second option is using setters: method per field to add value:
public static final class MyClass{
private long id_;
public static final int MEMBER_ID_FIELD_NUMBER = 2;
private long startDate_;
public void setID(long id_) {
this.id_ = id_;
}
public void setStartDate(long startDate_) {
this.startDate_ = startDate_;
}
}
You can use them as bellow:
public final void aFunc {
MyClass objectB = new MyClass();
objectB.setID(1L);
objectB.setStartDate(23214112213L);
}
But you can combine them. You can have the constructor and bellow the setters.
See java constructor and
see setters and getters
- For you private fields i assume you need getters too.
Those are part of the basic knowledge you should have. In addition keep in mind there are conventions (naming etc)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论