使用获取和返回类型接口的方法实现接口



我遇到了一个问题。我必须实现这个接口:

public interface Set_of_objects {
boolean equal(Set_of_objects s);
Set_of_objects cross(Set_of_objects s);
}

实现它的类必须接受一个对象数组并使用另一个对象数组对其进行测试。如果方法相等,则 "equal" 应返回 true(如果它们不相等,则返回 false(,而方法 "cross" 必须返回由它们共享的对象组成的对象数组。

由于该方法中所需的参数类型,我什至无法弄清楚如何比较这两个数组。

public class Object_array_test implements Set_of_objects {
Object[] x = new Object[5];
public Object_array_test (Object[] x) {
this.x = x;
}
public boolean equal(Set_of_objects s) {
return  s.equals(x);
}
public cross(Set_of_objects s) {
return null;
}
}

当我这样做时,它说: "equals(( 不太可能的参数类型:对象 [] 似乎与Set_of_objects无关">

当我尝试选角时(就像我在互联网上看到的那样(:

Object[] y = (Object[]) s;

我明白这个:

无法从Set_of_objects转换为对象[]

我如何解决这个问题,有人可以解释一下它是如何工作的吗?

A.只需尝试再次阅读您的要求(慢慢地:-((:

  1. 实现它的类必须接受一个对象数组

  2. 方法"cross"必须返回一个对象数组

所以。。。也不

boolean equal(Set_of_objects s);

也不

Set_of_objects cross(Set_of_objects s);

满足您的要求 -Set_of_objects不是一个数组,而只是一个Set_of_objects接口实现的对象。

接口的方法签名必须如下所示

public interface Set_of_objects {
boolean equal(Set_of_objects[] s);
Set_of_objects[] cross(Set_of_objects[] s);
}

二.从其他人手中,您可以使用您的Set_of_objects作为数组的支架,就像您一样......但是您需要另一种方法(为您的数组使用 getter,例如getX()( 并使用它来比较数组成员...

附言我想你会弄清楚如何遍历数组来比较对象并将它们放入另一个对象中以从cross方法返回。

此外,在现实世界中,不建议从方法返回数组的新实例...但作为锻炼,这并不重要。

祝你好运!

这里似乎有一些小问题。这是一个更新的界面:

package com.simi.practice.work.PracticeWork;
import java.util.*;
import java.lang.*;

public interface Set_of_objects {
boolean equals(Object[] x, Object[] y);
Object cross(Object[] x, Object[] y);
}

在原始界面中,您没有将数组作为对象传递。您只是传递一个接口"类型"。但是,您必须传递一个实际的数组对象才能将数组传递给类中的任何方法或构造函数。我们可以在接口中传递一个 x 对象和一个 y 对象,任何实现接口的类显然都会使用这些方法:

package com.simi.practice.work.PracticeWork;
import java.util.*;
import java.lang.*;
public class Object_array_test implements Set_of_objects{

public boolean equals(Object[]s, Object[]t) {
String v = Arrays.toString(s);
String r = Arrays.toString(t);
if(v.equals(r)) {
return true;
}
return false;
}
public Object[] cross(Object[]s, Object[]t) {
ArrayList<Object> n = new ArrayList<Object>();
for(int x= 0; x<s.length; x++) {
if(s[x].equals(t[x])) {
n.add(s[x]);
}
}System.out.println(n.toArray());
Object[] p = n.toArray();
System.out.println(Arrays.toString(p));
return  p;
}
}

在上面的代码中,您不知道将传递哪种对象,这就是我们将其转换为字符串的原因。如前所述,这些方法需要将对象作为参数才能使用数组。简单地传递接口"类型"是行不通的。在 .equals(( 方法中,我们可以比较两个数组以查看它们是否相同。否则,代码将返回 false。如果它们相同,则代码将返回 true。

最后,让我们测试类和输出:

public class App {
public static void main(String... args) throws IOException, MyException{
Object_array_test test = new Object_array_test();
Object[] i = {1, 2, 3, 4};
Object[] j = {1, 2, 90, 4};
System.out.println(test.equals(j, i));
System.out.println(test.cross(i,  j));
}
}

如您所见,这两个数组不相等,代码返回 false。我们还从数组列表中创建了一个新数组,该数组返回数组中相同的数字。我们返回已创建的新对象并将其打印到控制台。

这是您的输出:

false
[Ljava.lang.Object;@7852e922
[1, 2, 4]
[Ljava.lang.Object;@4e25154f

最新更新