小编dan*_*iol的帖子

Kotlin反思 - 检查财产是否有类型

我想迭代我的一个类中的所有字段,过滤注释的字段,然后检查字段是否有一个特定的类型.
我发现的只是field.returnType.isSubtype(other: KType)但我不知道如何获得KType我的其他课程.

到目前为止,这是我的代码:

target.declaredMemberProperties.forEach {
    if (it.findAnnotation<FromOwner>() != null) {
        if ( /*  it.returnType is Component <- Here I need some working check   */ ) {

            // do stuff
         } else {

            // do ther stuff
         }
    }
}
Run Code Online (Sandbox Code Playgroud)

reflection kotlin

2
推荐指数
1
解决办法
1893
查看次数

C#构造函数的方法引用

在C#中,我可以引用方法和静态方法。我还可以获取类构造函数的引用吗?

我可以说在Java中Supplier<MyClass> createMyClass = MyClass::new(而不是更长的lambda语法)。
在C#中,我只知道符号Func<MyClass> createMyClass = () => MyClass()。但是我认为带有构造函数引用的Java方式可读性更好。

而且我不想做一个静态CreateMyClass函数。我真的很想要构造函数。

c# reference

2
推荐指数
1
解决办法
793
查看次数

如何通过反射获取属性的值

我想使用具有一些注释的所有属性的值.在大多数情况下,我的代码都有效,我得到了所有的属性,只接受了那些有注释的属性.

private inline fun <reified A : Annotation> (target: Any) {
    target::class.memberProperties
                 .filter { it.annotations.any { annotation -> annotation is A } }
                 .forEach {
                     // How do I get the value here?
                 }
}
Run Code Online (Sandbox Code Playgroud)

我想使用it.get(...)但是get期望一个Nothingas参数.同样如此getter.调用it.call(target)确实有效但看起来不对,因为有一个get我不知道如何调用的实际值.

那么获取属性值的正确方法是什么?

reflection kotlin

2
推荐指数
1
解决办法
1928
查看次数

Monadic if else

我是Haskell的新手,想要生成一Arbitrary棵树.
所以我的第一个想法是创建一个仲裁bool,如果它是真的然后返回一个空树,否则创建一个非空的树:

instance (Arbitrary a) => Arbitrary (BinaryTree a)
  arbitrary = do
    createNonEmpty <- arbitrary
    if createNonEmpty 
      then return Nil
      else generateNonEmptyTree
Run Code Online (Sandbox Code Playgroud)

但是这种创造bool的模式并且仅仅为了它而使用它似乎有点奇怪,并且感觉应该有更惯用的方式.
在我可以使用的标准库中是否已经存在某种"monadic if"

arbitrary = ifM arbitrary (return Nil) (generateNonEmptyTree)
Run Code Online (Sandbox Code Playgroud)

或者还有哪种方法可以解决这个问题呢?

monads haskell

2
推荐指数
2
解决办法
173
查看次数

如何在 Emacs 中使用 Isabelle

我看到的大多数 Isabelle 文档都说 Proof-General 支持 Isabelle,但据我所知 PG 大约 5 年前就放弃了支持。

是否还有另一种可能性可以在 Emacs 中使用(当前的)Isabelle?JEdi​​t 和 VSCode 都不适合我。

emacs isabelle

2
推荐指数
1
解决办法
422
查看次数

Kotlin - 如何按元素类型查找和转换元素

我有一个继承的对象集合,Component我想要一个函数,它通过它的具体类找到一个对象并返回它。
但是 Kotlin 不喜欢我做的演员表,而且添加@Suppress("UNCHECKED_CAST")是丑陋的。

我有以下代码:

open class GameObjectImpl : GameObject {
    private val attachedComponents = mutableSetOf<Component>()

    @Suppress("UNCHECKED_CAST")
    override fun <TComponent : Component> getComponent(type: KClass<TComponent>): TComponent? {
         return attachedComponents.find { type.isInstance(it) } as? TComponent
    }
}
Run Code Online (Sandbox Code Playgroud)

kotlin

1
推荐指数
1
解决办法
721
查看次数

标签 统计

kotlin ×3

reflection ×2

c# ×1

emacs ×1

haskell ×1

isabelle ×1

monads ×1

reference ×1