我正致力于模拟无线传感器网络。我必须在模拟中创建一个节点。
创建节点的函数在类Simulator
中定义。这里Simulator
和RadioModel
是两个用户定义的类。
为了创建节点,我有一个预定义的函数,即在createNode()
类中定义的Simulator
。它具有以下语法:
Node createNode(Class nodeClass, RadioModel radioModel, int nodeId,
double x, double y, double z)
这里我对RadioModel
参数很好,除了"Class nodeClass"
之外的所有其他参数都正常工作。用什么来替代这个论点,即nodeclass
?
任何帮助都会有很大用处......
是的dacwe,正如你所说的Node类是由我实例化的Mica2Node类扩展的。我把这个论点作为通过
sim1.createNode(Mica2Node.class, g, nodeId,x,y,z);
这里sim1是类Simulator的对象,g是RadioModel类的对象。因为createNode不是静态方法,我通过对象调用它。但我面临其他三个警告:来自其他类别,e。 Application.java
public Application(Node node){
this.node = node;
node.addApplication(this);
}
这里它在addApplication(this)方法中显示错误。此方法在Node.java中定义如下:
public void addApplication(Application app){
app.nextApplication = firstApplication;
firstApplication = app; }
错误如下:
线程“main”中的异常java.lang.RuntimeException:无法编译的源代码 - 错误的sym类型:()void 在net.tinyos.prowler.Application。(Application.java:31) at net.tinyos.prowler.TestBroadcastNode $ BroadcastApplication。(TestBroadcastNode.java:36) 在net.tinyos.prowler.TestBroadcastNode.main(TestBroadcastNode.java:118)
请帮帮我......
答案 0 :(得分:0)
你在找这样的东西吗?
public <T extends Node> T createNode(Class<T> clazz, RadioModel radioModel,
int nodeId, double x, double y, double z);
可以像
一样使用RadioModel radioModel = ...
MyNode node = createNode(MyNode.class, radioModel, 1, 2, 3);
另一种方法可能是创建一个封装所有节点类型创建的工厂,例如
public interface NodeFactory {
public MyNode createMyNode(..);
public YourNode createYourNode(..);
}
答案 1 :(得分:0)
createNode
方法应该创建的(可能)类。
您有一些扩展Node
的“节点类”(在下面的示例中为BigNode
和SomeOtherNode
)。所以你使用类信息来创建其中一个。
主叫部分:
Node created = Simulator.createNode(BigNode.class, radioModel, nodeId, x, y, z);
createNode
的实施:
Node createNode(Class nodeClass, RadioModel radioModel, int nodeId,
double x, double y, double z) {
if (nodeClass.equals(BigNode.class))
return new BigNode(radioModel, nodeId, x, y, z);
if (nodeClass.equals(SomeOtherNode.class)) {
return new SomeOtherNode(.....);
throw new IllegalArgumentException("could not create node of type " +
nodeClass);
}