我有一个包含大量字段的JAVA类.它们基本上应该在构造函数阶段设置,永远不会改变.从语义上讲,类是不可变的.
public class A{
final int a;
final short b;
final double e;
final String f;
final String g;
//and more
}
Run Code Online (Sandbox Code Playgroud)
问题是通常这些字段具有默认值,因此我不希望总是给用户带来包含所有这些字段的构造函数.大多数时候,他们只需要设置几个.有几种方法可以解决这个问题:
这些都不是完全令人满意的.还有其他方法吗?谢谢.单程
我有一些Java枚举
public enum Aggregation
{
MORTGAGE( "Mortgage" ),
POOLS( "Pools" ),
PORTFOLIO( "Portfolio" );
private Aggregation( final String name )
{
m_Name = name;
}
private String m_Name;
static Map< String, Aggregation > c_LOOKUP =
new HashMap< String, Aggregation >();
static {
for (Aggregation agg:values()){
c_LOOKUP.put(agg.m_Name,agg);
}
}
public Aggregation lookup(String name){
return c_LOOKUP.get( name );
}
@Override
public String toString()
{
return m_Name;
}
}
public enum Interval
{
MONTHLY( "Monthly" ),
QUARTLY( "Quartly" ),
SEMIANNUALLY( "SemiAnnually" ),
ANNUALLY("Annually"); …
Run Code Online (Sandbox Code Playgroud) 我想为一些测试任务设置一些东西.更具体地说,我想添加一些环境变量和一些系统属性,可能还有一些其他的东西,比如"dependencies"或"workingDir".通过常规Test
任务,我可以做到这一点,
task test1(type:Test, dependsOn:[testPrep,testPrep1]){
workingDir testWorkingPath
systemProperty 'property','abs'
environment.find { it.key ==~ /(?i)PATH/ }.value += (System.properties['path.separator'] + myLibPath)
environment.LD_LIBRARY_PATH = "/usr/lib64:/lib64:${myLibPath}:" + environment.LD_LIBRARY_PATH
}
task test2(type:Test, dependsOn:[testPrep]){
workingDir testWorkingPath
systemProperty 'property','abs'
environment.find { it.key ==~ /(?i)PATH/ }.value += (System.properties['path.separator'] + myLibPath)
environment.LD_LIBRARY_PATH = "/usr/lib64:/lib64:${myLibPath}:" + environment.LD_LIBRARY_PATH
systemPropety 'newProperty','fdsjfkd'
}
Run Code Online (Sandbox Code Playgroud)
如果有一个新的任务类型MyTestType
扩展常规的Test任务类型,定义了通用定义,那就太好了.
task test1(type:MyTestType){
dependsOn testPrep1
}
task test2(type:MyTestType){
systemPropety 'newProperty','fdsjfkd'
}
Run Code Online (Sandbox Code Playgroud)
最好的方法是什么?似乎该execute()
方法是最终的,不能扩展.我需要做一些像doFirst
设置这些属性的事情.我应该在构造函数中添加所有额外的值吗?我可以使用其他任何钩子吗?谢谢.