gpt4 book ai didi

java - 如何将未知类型的对象传递给未知类型的类

转载 作者:搜寻专家 更新时间:2023-11-01 01:44:14 26 4
gpt4 key购买 nike

我目前正在为我正在学习的 Java 编程类(class)做家庭作业。我不是要一个确切的答案,而是要一些指导。

我正在处理的问题是:

我有一个实现 Filter 接口(interface)的过滤器类。这个接口(interface)只有一个方法 - matches(T element)

我已经配置了我的过滤器方法来检查传入的整数是否为质数。

还有一个装饰器类,将一个集合类装饰成只显示通过过滤器的对象。

我在让 contains(Object o) 方法正常工作时遇到问题。

基本上 FilteredCollection 类中的 contains(Obj o) 方法应该首先检查对象是否通过了过滤器,如果通过了,调用未修饰的该对象的 contains() 方法。

假设我希望能够将此 FilteredCollection 类与许多不同类型的过滤器一起使用,我如何才能确定传入的对象类型,然后能够将该对象传递给当前正在实现的过滤器。

这是我的 PrimeNumberFilter 类:

public class PrimeNumberFilter implements Filter<Integer> {

public boolean matches(Integer e) {
int n = e.intValue();
if (n != 2 && n % 2 == 0) {
return false;
}

for (int i = 3; i * i <= n; i += 2) {
if (n % i == 0) {
return false;
}
}
return true;
}

}

然后这是我缩短的 FilteredCollection 类:

class FilteredCollection<T> implements Collection<T> {

Collection<T> fc;
Filter<T> currentFilter;

private FilteredCollection(Collection<T> coll, Filter<T> filter) {

this.fc = coll;
this.currentFilter = filter;

}

public static <T> FilteredCollection<T> decorate(Collection<T> coll,
Filter<T> filter) {

return new FilteredCollection<T>(coll, filter);
}

public boolean contains(Object o) {

//What do I do here?
return fc.contains(o);
}

传递给 contains 方法的对象必须通过过滤器,在本例中为 PrimeNumberFilter

我得到的错误是它一直想将对象转换为 T 类型,而且我知道由于删除,这将永远行不通。

我进行了大量研究,并将其归结为需要使用反射。

我的导师给我的唯一提示是对象只有几个方法我可以使用,我应该使用其中的一个。

感谢您的帮助!

编辑:项目的要求之一是不要在任何方法中将对象转换为 T。因此,尽管这些答案很棒,但我无法使用它们中的任何一个。

最佳答案

要使用的方法是 Object.equals(Object)。您可以迭代集合 fc 并检查它是否包含 equals(o) 的元素。如果是,则继续处理所述元素(类型为 T)。

for(T e : fc) {
if(o.equals(e)) {
// carry on with e
}
}

您可能还想覆盖 o == null

关于java - 如何将未知类型的对象传递给未知类型的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16571088/

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