gpt4 book ai didi

java - 如何获取通用类型的列表或者如果不可能如何解决提供的任务?

转载 作者:行者123 更新时间:2023-12-02 00:52:03 26 4
gpt4 key购买 nike

任务是:要求您在一家生产和包装面包的公司中创建质量控制系统,主要类的片段如下:

// These and its subclasses should pass quality check
class Bakery {}

class Cake extends Bakery {}

// And this and other stuff should not
class Paper {}

// These boxes are used to pack stuff
interface Box<T> {
void put(T item);
T get();
}

// Class you need to work on
class QualityControl {

public static boolean check(List<Box<? extends Bakery>> boxes) {
// Add implementation here
}

}

以如下方式实现检查方法:

如果所有框中的所有对象都属于类 Bakery 或其子类或列表不包含框,则返回 true。

否则返回 false,包括 Box 为空或 List 包含根本不是 Box 的内容的情况。

该方法不应引发任何异常。

我尝试过这个,但是当列表为空时我遇到了麻烦,而且我的解决方案似乎不是首选。

class QualityControl {

public static<T> boolean check(java.util.List<T> items) {

if (items.isEmpty()) return true;
if (items == null) return false;
boolean areBoxes = true;

java.util.Set<String> ss = new java.util.HashSet<>();

//Check if all are boxes
for (T item : items) {
java.util.Set<java.lang.reflect.Type> set = new java.util.HashSet<>();
boolean isBox = false;
Class c = item.getClass();
while (c != null) {
for (java.lang.reflect.Type type : c.getGenericInterfaces()) set.add(type);
c = c.getSuperclass();
}

for (java.lang.reflect.Type type : set) {
String boxName = Box.class.getName();
String typeName = type.getTypeName();
if (typeName.startsWith(boxName + "<")) {
isBox = true;
ss.add(typeName);
break;
}
}

areBoxes &= isBox;
}

if (!areBoxes) return false;

//Check if box contain bakery

boolean isIns = true;

for (String s : ss) {
s = s.substring(4);
s = s.substring(0, s.length() - 1);
boolean helper = false;
try {
Class clazz = Class.forName(s);

while (clazz != null) {
if (clazz.equals(Bakery.class)) {
helper = true;
break;
}
clazz = clazz.getSuperclass();
}
isIns &= helper;
helper = false;

} catch (ClassNotFoundException e) {
return false;
}

}

return isIns;
}

}

最佳答案

先检查 null,然后检查空。您可以使用instanceof来检查类型:

class QualityControl {
public static <T> boolean check(java.util.List<T> items) {
if (items == null || items.isEmpty()) {
return false;
}
return items.stream()
.noneMatch(b -> (!(b instanceof Box))
|| !(((Box) b).get() instanceof Bakery));
}
}

关于java - 如何获取通用类型的列表或者如果不可能如何解决提供的任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57849564/

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