如何解决如何在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来仅测试一种方法。
解决方法
如果它具有默认构造函数(不带任何参数的构造函数),则可以先创建对象而不提供字段值,并使用设置方法(如果存在)对它进行设置,如下所示:
public final void aFunc {
MyClass aaa = new MyClass();
a.setId_(1);
...
}
如果它没有默认的构造函数,则需要在对象创建过程中提供所有参数,例如:
public final void aFunc {
MyClass aaa = new MyClass(1,2,3);
....
}
,
创建对象实例并将值分配给字段的方法有多种:
-
调用设置方法:
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;
-
使用构建器:
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();
您有两个选择,以便用值填充字段。 一种选择是使用公共构造函数传递要更新的所有参数:
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);
}
第二个选项使用setters:每个字段的方法来添加值:
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);
}
但是您可以将它们结合起来。您可以有构造函数,也可以有二传手。
请参见java constructor和 参见setters and getters
- 对于您的私人领域,我认为您也需要吸气剂。
这些是您应具备的基本知识的一部分。另外请记住,有一些约定(命名等)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。