如何在提供公共静态工厂方法的 Java 记录上隐藏构造函数?

问题描述 投票:0回答:1

我在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

,如何隐藏记录的隐式构造函数?

java constructor factory java-record static-factory
1个回答
0
投票
如果编译器如何隐藏记录的

隐式构造函数 禁止将其标记为私有?

我认为记录的规范构造函数非常“明确”(但这可能是语义)。记录规范清楚地表明规范构造函数是公共的。改变这一点将违背记录存在的理由。

通过常规课程您可以实现您想要的目标。

© www.soinside.com 2019 - 2024. All rights reserved.