Java 查看对象是否包含值
我在Java中有一个类结构,其中一个类扩展了另一个类,子类可以比超类拥有更多的变量。在我创建的一个函数中,我接受超类作为参数,因此我不知道传递的对象是否是子类的实例(出于一些原因,我无法测试它是否是)。我仍然希望访问子类中的那些变量,那么是否仍然可以在对象中搜索变量?我知道变量的确切名称,我只是不知道我要传递的对象是否真的包含变量,如果这有意义的话Java 查看对象是否包含值,java,Java,我在Java中有一个类结构,其中一个类扩展了另一个类,子类可以比超类拥有更多的变量。在我创建的一个函数中,我接受超类作为参数,因此我不知道传递的对象是否是子类的实例(出于一些原因,我无法测试它是否是)。我仍然希望访问子类中的那些变量,那么是否仍然可以在对象中搜索变量?我知道变量的确切名称,我只是不知道我要传递的对象是否真的包含变量,如果这有意义的话 @Override public void received(Connection connection, Object object) { if
@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。我希望最终用户能够添加扩展数据包的不同类,但不一定具有与其他数据包相同的变量。我需要能够测试所有的数据包类型,所以我不能硬编码函数来只检查一种数据包类型。结果表明,我只需要在现有数据包类型的基础上添加一层额外的代码。需要特定变量的数据包的每个子类还必须扩展另一个包含该变量的类。简单的逻辑问题,真的。创建一个具有所需方法的接口:
interface HasSomeValue {
public int getSomeValue();
}
然后让具有此值的类实现接口并测试接口,而不是超级类:
class PacketMessage extends Packet implements HasSomeValue {
public int getSomeValue() {
return 0; // whatever
}
// rest of class
}
然后在处理器中:
if (object instanceof HasSomeValue )
{
if(((HasSomeValue) packet).getSomeValue() == ?)
{
}
}
你能用一些代码来说明问题吗?当然,给我一点时间。为什么不干脆
对象PacketMessage的instanceofpacketmessage
?@opop65不是一种可以扩展的方式。呃,不,我认为不必这样。这不是我的命名约定,我不明白为什么我会有“类设计”问题,因为我没有按照您希望的方式命名@波希米亚人