我正在试验Kotlin中的反射功能,但我似乎无法理解如何获取KType值.
假设我有一个将短语映射到对象工厂的类.在模糊的情况下,用户可以提供type将搜索范围缩小到仅返回该类型对象(或某些子类型)的工厂的参数.
fun mapToFactory(phrase: Phrase,
type: KType = Any::class): Any {...}
Run Code Online (Sandbox Code Playgroud)
type我需要接受几乎任何东西,包括Int从我的经验中看起来有点特别对待.默认情况下,它应该是类似的Any,这意味着"不排除任何工厂".
如何为默认值(或任何值)指定type?
我目前有一个声明如下的属性:
class Foo(val base : FooBase){
var _number: Int? = null
override var number: Int
get() = _number ?: base.number
set(value) {_number = value}
}
Run Code Online (Sandbox Code Playgroud)
但是,我有很多这样的属性,导致相当多的代码重复.有办法避免这种情况吗?我知道属性委托是一种方法,但我不确定如何ReadWriteProperty<...>正确实现.如果我应该使用它,我如何使用"属性"值?
我是Haskell的初学者,试用GPipe.
以下代码运行正常:
shader <- compileShader $ do
primitiveStream <- toPrimitiveStream id
let transPrims = fmap
(\(pos,col) -> (perspective (pi/3) 1 1 100 !* pos, col))
primitiveStream
fragmentStream <- rasterize
(const (FrontAndBack, ViewPort (V2 0 0) (V2 500 500), DepthRange 0 1))
transPrims
drawContextColor (const (ContextColorOption NoBlending (V3 True True True)))
fragmentStream
Run Code Online (Sandbox Code Playgroud)
但是,我有2个变量windowWidth和windowHeight(都是Int类型),当我尝试这样做时:
shader <- compileShader $ do
primitiveStream <- toPrimitiveStream id
let transPrims = fmap
(\(pos,col)
-> (perspective (pi/3) (windowWidth/windowHeight) 1 100 !* pos, col))
primitiveStream
fragmentStream <- rasterize
(const …Run Code Online (Sandbox Code Playgroud)