目前在此回购协议中:https://github.com/quinnliu/WalnutiQ
我使用以下代码创建部分大脑模型:
Neocortex unconnectedNeocortex = new Neocortex(new Region("V1", 4, 4,
4, 50, 3), new RegionToRegionRectangleConnect());
LGN unconnectedLGN = new LGN(
new Region("LGN", 8, 8, 1, 50, 3));
Retine unconnectedRetina = new Retine(65, 65);
NervousSystem nervousSystem = new NervousSystem(unconnectedNeocortex,
unconnectedLGN, unconnectedRetina);
// connect Retine to LGN
Retine retine = nervousSystem.getPNS().getSNS().getRetine();
LGN LGN = nervousSystem.getCNS().getBrain()
.getThalamus().getLGN();
SensorCellsToRegionConnect sensorCellsToRegionConnect = new SensorCellsToRegionRectangleConnect();
sensorCellsToRegionConnect.connect(retine.getVisionCells(),
LGN.getRegion(), 0, 0);
// connect LGN to V1 Region of Neocortex
Neocortex neocortex = nervousSystem.getCNS().getBrain().getCerebrum()
.getCerebralCortex().getNeocortex();
RegionToRegionConnect regionToRegionConnect = new RegionToRegionRectangleConnect();
regionToRegionConnect.connect(LGN.getRegion(),
neocortex.getCurrentRegion(), 0, 0);
你可能已经注意到我上面使用的以下代码有不好的代码味道:
Retine retine = nervousSystem.getPNS().getSNS().getRetine();
LGN LGN = nervousSystem.getCNS().getBrain().getThalamus().getLGN();
我想通过将其变成这样的东西来解决这个问题:
Retine retine = nervousSystem.get<Retine>();
LGN LGN = nervousSystem.get<LGN>();
我被告知这是可能的,但我目前不知道该怎么做。有人可以解释我如何让这个工作的步骤?谢谢!
答案 0 :(得分:1)
听起来你想要某种自动图形遍历系统(与泛型没什么关系)。
类似的东西:
public abstract class BodyPart {
private List<? extends BodyPart> _linkedParts;
public <T extends BodyPart> T getPart(Class<? extends T> clazz) {
for(BodyPart part : _linkedParts) {
if(clazz.isInstance(part)) {
return clazz.cast(part);
}
T childPart = part.getPart(clazz);
if(childPart != null) {
return childPart;
}
}
return null;
}
}
然后,假设所有模型都扩展了BodyPart(并且它们的直接链接部分被添加到_linkedParts列表中),您可以执行以下操作:
Retine retine = nervousSystem.getPart(Retine.class);
显然,这假设所有链接都有唯一的结果,没有循环链接。如果情况并非如此,那么你必须使逻辑变得更聪明(检测圆圈,返回多个结果等)。