gpt4 book ai didi

java - 如何创建正确的返回类型?

转载 作者:行者123 更新时间:2023-11-29 05:41:52 25 4
gpt4 key购买 nike

我会在底部发布我的问题。

下面是其他类的扩展类。

public class people {

class family extends people {
}

class friends extends people {
}

class coworkers extends people {
}
}

下面是具有方法 getAllPeopleByClass 的类,该方法由选择类中的 getMembers() 方法调用:

public class processing {

static processing process = null;
private Collection<family> familyList = new ArrayList<family>();
private Collection<coworkers> cowList = new ArrayList<coworkers>();
private Collection<friends> friendList = new ArrayList<friends>();

public processing(){
}

public static processing getInstance() {
if (process == null)
process = new processing();
return process;
}

public <T> Collection<people> getAllPeopleByClass(Class<T> clazz) {
Collection<people> peopleCollection;
peopleCollection.addAll(getList(clazz));
return peopleCollection;
}

private <T> Collection<? extends people> getList(Class<T> clazz) {
if (clazz == family.class) {
return familyList;
} else if (clazz == coworkers.class) {
return cowList;
} else { // else if clazz == friends.class
return friendList;
}
}

最后,使用处理的类:

 public class familySelection {
public Collection<family> getMembers() {
Collection<family> f;
f = processing.getInstance().getAllPeopleByClass(family.class); //type mismatch
return f;
}
}

public class coworkerSelection {
public Collection<coworkers> getMembers() {
Collection<coworkers> c;
c = processing.getInstance().getAllPeopleByClass(coworkers.class); //type mismatch
return c;
}
}


public class friendsSelection {
public Collection<friends> getMembers() {
Collection<friends> f;
f = processing.getInstance().getAllPeopleByClass(friends.class); //type mismatch
return f;
}
}

我的问题是我从每个 getMembers() 方法中的 getAllPeopleByClass 调用中得到类型不匹配。

我试过这个:

public class familySelection {
public Collection<family> getMembers() {
Collection<? extends people> f; //changed to extend from people
f = processing.getInstance().getAllPeopleByClass(family.class);
return (Collection<family>) f; //cast warning - dont want that
}
}

这行得通,但我收到了强制转换警告,这是我不想要的,也不想压制它。这是我最接近解决问题的一次。此外,getMembers() 的返回类型必须保持原样。有没有人有办法在没有任何警告的情况下做到这一点?或者甚至以某种方式一般地处理这个问题?谢谢!

最佳答案

public <T> Collection<T> getAllPeopleByClass(Class<T> clazz) {
Collection<T> peopleCollection = new ArrayList<T>();
for(people p : getList(clazz)) {
peopleCollection.add(clazz.cast(p));
}
return peopleCollection;
}

关于java - 如何创建正确的返回类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17194004/

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