我在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的不同类,但不一定与其他数据包具有相同的变量。我需要能够测试所有数据包类型,所以我不能硬编码该功能只检查一种数据包类型。
答案 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() == ?)
{
}
}