我想迭代我的一个类中的所有字段,过滤注释的字段,然后检查字段是否有一个特定的类型.
我发现的只是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) 在C#中,我可以引用方法和静态方法。我还可以获取类构造函数的引用吗?
我可以说在Java中Supplier<MyClass> createMyClass = MyClass::new(而不是更长的lambda语法)。
在C#中,我只知道符号Func<MyClass> createMyClass = () => MyClass()。但是我认为带有构造函数引用的Java方式可读性更好。
而且我不想做一个静态CreateMyClass函数。我真的很想要构造函数。
我想使用具有一些注释的所有属性的值.在大多数情况下,我的代码都有效,我得到了所有的属性,只接受了那些有注释的属性.
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我不知道如何调用的实际值.
那么获取属性值的正确方法是什么?
我是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)
或者还有哪种方法可以解决这个问题呢?
我看到的大多数 Isabelle 文档都说 Proof-General 支持 Isabelle,但据我所知 PG 大约 5 年前就放弃了支持。
是否还有另一种可能性可以在 Emacs 中使用(当前的)Isabelle?JEdit 和 VSCode 都不适合我。
我有一个继承的对象集合,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)