查看对象是否包含值

时间:2014-01-26 03:01:08

标签: java

我在Java中有一个类结构,其中一个类扩展另一个类,并且子类可以拥有比超类更多的变量。在我创建的函数中,我接受超类作为参数,所以我不知道我传入的对象是否是子类的实例(我无法测试它是否有几个原因) 。我仍然希望在子类中访问这些变量,所以无论如何都要搜索对象中的变量?我知道变量的确切名称,我只是不知道我将传入的对象实际上是否包含变量,如果这有意义的话。

@Override
public void received(Connection connection, Object object)
{
 if (object instanceof Packet)
    {
        if(packet.contains(variable))
        {
            //don't know how to test for this
        }
}
}

Packet是超类,我有另一个名为PacketMessage的类,它扩展了Packet。我在PacketMessage中有变量,这些变量在Packet中不存在。

我无法测试PacketMessage,因为我正在尝试创建一个灵活的API。我希望最终用户能够添加扩展Packet的不同类,但不一定与其他数据包具有相同的变量。我需要能够测试所有数据包类型,所以我不能硬编码该功能只检查一种数据包类型。

2 个答案:

答案 0 :(得分:0)

结果我需要在现有代码之上添加额外的代码层。 Packet的每个子类都需要一个特定的变量,还必须扩展另一个包含该变量的类。简单的逻辑问题,真的。

答案 1 :(得分:0)

创建一个具有所需方法的界面:

interface HasSomeValue {
    public int getSomeValue();
}

然后让具有此值的类实现接口并测试它,而不是supercass:

class PacketMessage extends Packet implements HasSomeValue {
    public int getSomeValue() {
        return 0; // whatever
    }
    // rest of class
}

然后在你的处理器中:

if (object instanceof HasSomeValue )
{
    if(((HasSomeValue) packet).getSomeValue() == ?)
    {

    }
}