Java模板方法中规定传的参数,java – 如何在Kotlin中实现模板方法设计模式?

考虑一下问题:

我们有一个带抽象方法的Base类.现在,我们希望强制执行此方法的每个覆盖都将执行一些参数检查或其他一些苦差事.我们希望这个参数检查在所有覆盖中都是相同的.一种解决方案是将此行为包装在一个非抽象方法中,该方法调用一个抽象方法:

abstract class Base

{

fun computeSomething(argument: Int): Int

{

require(argument > 0) // Some intricate checking

return execute(argument)

}

// Pure functionality, assuming correct arguments

// Ideally, this would be private.

protected abstract fun execute(validArgument: Int): Int

}

class Derived1: Base()

{

override fun execute(validArgument: Int): Int =

validArgument * validArgument

}

class Derived2: Base()

{

override fun execute(validArgument: Int): Int =

validArgument * validArgument * validArgument

}

fun main(args: Array)

{

val d = Derived1()

println(d.computeSomething(23))

}

我想让Base :: execute private,这样Base的子类就不会在不检查其参数的情况下偶然调用它.不幸的是,这是不可能的:

Error:(9, 5) Kotlin: Modifier ‘private’ is incompatible with

‘abstract’

Kotlin的受保护比Java受保护更好,因为它使函数只能访问子类,但理想情况仍然是私有的.

那么有没有一种正确的方法来实现这种模式?另外,出于好奇,私人和抽象的不兼容是故意选择语言设计吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值