我在Java中有这个简单的记录:
public record DatePair( LocalDate start , LocalDate end , long days ) {}
我希望所有三个属性(
start
、end
和days
)都可供公开阅读,但我希望第三个属性(days
)自动计算,而不是在实例化期间传入。
所以我添加了一个静态工厂方法:
public record DatePair( LocalDate start , LocalDate end , long days )
{
public static DatePair of ( LocalDate start , LocalDate end )
{
return new DatePair ( start , end , ChronoUnit.DAYS.between ( start , end ) ) ;
}
}
我只想这个静态工厂方法用于实例化。我想隐藏构造函数。因此,我明确地编写了隐式构造函数,并将其标记为private
。
public record DatePair( LocalDate start , LocalDate end , long days )
{
private DatePair ( LocalDate start , LocalDate end , long days ) // <---- ERROR: Canonical constructor access level cannot be more restrictive than the record access level ('public')
{
this.start = start;
this.end = end;
this.days = days;
}
public static DatePair of ( LocalDate start , LocalDate end )
{
return new DatePair ( start , end , ChronoUnit.DAYS.between ( start , end ) ) ;
}
}
但是将该承包商标记为 private
会导致编译器错误:
java:记录 DatePair 中的规范构造函数无效(尝试分配更强的访问权限;是公共的)👉🏼 如果编译器禁止将记录标记为
private
,如何隐藏记录的隐式构造函数?
如果编译器如何隐藏记录的我认为记录的规范构造函数非常“明确”(但这可能是语义)。记录规范清楚地表明规范构造函数是公共的。改变这一点将违背记录存在的理由。隐式构造函数 禁止将其标记为私有?
通过常规课程您可以实现您想要的目标。