[英]How do i declare a static equals method in a generic interface that compares two types of implementation of the interface?
[英]How do I create a method to check that an implementation satisfies an 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())");
输出是
真正
我从这个问题中读到了更多。 我的问题是“这是(带有”.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();
}
}
不确定你想要做什么,但这样的事情应该有效:
inter.getClass().isInstance(implemen)
尽管如此,最有可能的是你要做的事情要比采用这种做法更好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.