Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 定义类字段的元信息最有效的方法是什么_Java_Kotlin_Interface_Abstract Class - Fatal编程技术网

Java 定义类字段的元信息最有效的方法是什么

Java 定义类字段的元信息最有效的方法是什么,java,kotlin,interface,abstract-class,Java,Kotlin,Interface,Abstract Class,我正在为一个东西构建一个依赖注入系统,该东西通过一系列类传递“Object”的varargs,这些类都实现了一些由接口支持的“execution”方法 class SomeProcessor组件:AbstractProcessor{ @凌驾 趣味执行(varag对象:对象):单位{ } } 这个系统工作得很好,但是它有一种从对象中提取依赖项的非常详细的方法,在每个类中使用一些实用程序来查看对象并查找类实例。这些可以是可选的,也可以是对象中必需的,当缺少必需的实例时,将引发异常 这是一个可能的例

我正在为一个东西构建一个依赖注入系统,该东西通过一系列类传递“Object”的varargs,这些类都实现了一些由接口支持的“execution”方法

class SomeProcessor组件:AbstractProcessor{
@凌驾
趣味执行(varag对象:对象):单位{
}
}
这个系统工作得很好,但是它有一种从对象中提取依赖项的非常详细的方法,在每个类中使用一些实用程序来查看对象并查找类实例。这些可以是可选的,也可以是对象中必需的,当缺少必需的实例时,将引发异常

这是一个可能的例子

class SomeProcessor组件:AbstractProcessor{
@凌驾
趣味执行(varag对象:对象):单位{
val thingOne=Util.require(对象,SomeClass::class.java)
if(null==thingOne){
抛出异常
}
val thingTwo=Util.get(对象,SomeOtherClass::class.java)
val thingtree=Util.require(对象,SomeThirdClass::class.java)
if(null==ThingTree){
抛出异常
}
}
}
正如您可能想象的那样,这可能会变得非常冗长,尤其是当类具有大量必需的依赖项时

我对此的最初解决方案是构建一个DI系统,它本质上定义了execute的作用域,作为一个带有注释的类,该注释表示是否需要一个字段,我想它应该是这样的

class SomeProcessor组件:AbstractProcessor{
@凌驾
类范围{
@必需的
瓦尔·廷贡:某个班级
val thingTwo:其他人吗
@必需的
val ThingTree:第三类
}
@凌驾
乐趣执行(范围:范围):单位{
//只有业务逻辑
}
}
在与其他开发人员进行了一些对话之后,我了解到这可能是相当低效的,因为必须在运行时使用反射来获取注释元数据。我知道当前Util正在使用“isAssignableFrom”以及迭代集合来确定Objects集合是否具有所需的类。我想,因为我可以一次完成所有这些处理,我至少应该在这方面节省一些开销

检查字段注释的成本是否比这样做更高,或者是否有更好的方法我没有看到

另外,作为一个额外的问题,我知道我在类字段上的@Override实际上是不可能的,但我希望我在kotlin中能够做到的是,我找到了一个语法正确的解决方案,即向接口添加一个类getter,并重写指向类本身的getter,如果有人有更好/正确的方法,我将非常感谢您的反馈

谢谢大家!


(如果您更熟悉java解决方案,我也很高兴看到这一点:)

您可以在中存储内容,但您必须修改类文件并创建自定义类加载器。注释可能更好