Java:为Class Type参数添加什么?

时间:2011-09-03 17:15:43

标签: java class types arguments

我正致力于模拟无线传感器网络。我必须在模拟中创建一个节点。

创建节点的函数在类Simulator中定义。这里SimulatorRadioModel是两个用户定义的类。

为了创建节点,我有一个预定义的函数,即在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)

请帮帮我......

2 个答案:

答案 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的“节点类”(在下面的示例中为BigNodeSomeOtherNode)。所以你使用类信息来创建其中一个。

主叫部分:

 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);
}