gpt4 book ai didi

java - 如何创建一种方法来检查实现是否满足接口(interface)?

转载 作者:搜寻专家 更新时间:2023-11-01 03:05:41 25 4
gpt4 key购买 nike

我有一个接口(interface) (p) 和一个实现 (imp)。如果我在代码中执行以下操作,则检查有效:

if (!(imp instanceof p)) {
logger.error(imp.getClass().getName()+
" doesn't satisfy the interface "
+p.getClass().getName());
}

我试着把它变成一个可调用的方法,如下所示:

private boolean checkInterfaceImplementation(Object implemen, Object inter){
return (implemen instanceof inter);
}

失败了。

然后我发现inter需要是具体的类型,不能用泛型对象。然后我发现了

"B.class.isAssignableFrom(A.getClass())"

然后我做了:

System.out.println("B.class.isAssignableFrom(A
.getClass())");

输出是

true

我从 this question. 阅读了更多内容我的问题是“这是(带有“.isAssignableFrom”的第二个实现)是实现所述方法的首选或标准方式吗?当前的实现是否会产生问题?

最佳答案

很难理解你的问题。如有必要,我会在收到更多详细信息后进行编辑,但根据一般经验,instanceof 表示缺乏多态性和设计问题。并非总是如此,但如果您是初学者,我会尽量少用它。

相反,想想为什么支票在那里。如果“imp”实现了“p”,那么你保证任何“imp”都将拥有“p”中的所有方法。如果没有,您将在构建之前收到编译器错误。现在这是非常抽象的,所以我将做一个简单的例子。

public interface Runs {
public void run();
}

public class Cat implements Runs {
int numLegs;
public Cat() {
this.numLegs = 4;
}
public void run() {
System.out.println("does whatever running cats do");
}
}

public class Human implements Runs {
int numLegs;
public Human() {
this.numLegs = 2;
}
public void run() {
System.out.println("does whatever running humans do");
}
}
public class Main {
public static void main(String[] args) {
Cat cat = new Cat();
Human human = new Human();

ArrayList<Runs> listOfRunners = new ArrayList<Runs>();
listOfRunners.add(cat);
listOfRunners.add(human);
Runs runner = listOfRunners.get(0);
/* no compiler error because by implementing Runs we guarantee it has run() method */
runner.run();
runner = listOfRunners.get(1);
/* It doesn't matter what the object is. We don't care if it is cat or human */
runner.run();
}
}

关于java - 如何创建一种方法来检查实现是否满足接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23685602/

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