gpt4 book ai didi

java - 检查扩展类是否是接口(interface)的实例

转载 作者:行者123 更新时间:2023-11-30 03:47:37 24 4
gpt4 key购买 nike

我正在尝试检查扩展类 B 的类 A 是否是某个接口(interface)的实例。

基本上这是我的设置:

public class House
{
(variables)

public House(variables) {...}
}

public class Kitchen extends House implements IFurniture
{
(variables)

public Kitchen(variables)
{
super(variables);
}
}

public class Bathroom extends House implements IWalls

等等...

我有一个方法,可以得到一个 Actor 阵容的家庭版《厨房和浴室》。我基本上想这样做:

public boolean hasFurniture(House house)
{
if (house instanceof IFurniture){return true;}
}

我是否需要使用 house.getClass().getInterfaces() ,考虑到参数已经被转换,这是否有效?

问题是我正在为游戏编写模组,但无法编辑游戏类。在这种情况下,只能编辑 Kitchen、Bathroom 和 hasFurniture。

同时忽略我的类名称,它们只是示例名称,这样您就不会意外地混淆类。

最佳答案

你正在浪费多态性的好处。您不想使用带有 instanceof 的接口(interface)来检查对象是否具有属性。 implementsextends 表示 IS-A,而不是 HAS-A。你显然想要后者。这样做:

public interface IFurniture {
public boolean hasFurniture();
}


public class House implements IFurniture
{
(variables)

public House(variables) {...}

@Override
public boolean hasFurniture() {
return false;
}
}

public class Kitchen extends House
{
(variables)

public Kitchen(variables)
{
super(variables);
}

@Override
public boolean hasFurniture() {
return true;
}
}

编辑:此外,Eran 正确地指出,这种层次结构一开始并没有多大意义——但这是一个更大的问题。

关于java - 检查扩展类是否是接口(interface)的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25234029/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com