我正在寻找一种在编译时允许实例之间关系的方法。 以抽象的方式,这意味着接口的几个子类型与相同类型的多个属性相关,但并非所有属性都以逻辑方式兼容。我想在编译时检查它。
场景如下:
解决方案:
<Animal> <Type>Lion</Type> <Countries> <Country>Zimbabwe</Country> <Country>Kenya</Country> </Countries> </Animal> <Animal> <Type>Gorilla</Type> <Countries> <Country>Zimbabwe</Country> <Country>Botswana</Country> </Countries> </Animal>
但这只能在运行时失败
我所寻找的是某种模式,它在编译时以一种漂亮且可扩展的方式进行此类型检查:
if (animal instanceOf Lion){
if (country instanceOf Botswana) throw new UnsupportedMapping("There are no lions in Botswana")
}
//for Kenya
else if (animal instanceOf Gorilla){
if (country instanceOf Kenya) throw new UnsupportedMapping("There are no gorillas in kenya")
}
使用泛型或地图可能是一种棘手的方法......
答案 0 :(得分:1)
你想要的是像java 8 pluggable type system。
使用它的示例和框架是here。
使用它来创建@Animal和@Country注释似乎完全可能,但不一定是明智的。然后设置一个相应的类型检查器,查询appropriate database以查看它们是否已灭绝。