gpt4 book ai didi

java - 这是在 Java 中使用泛型的正确方法吗?

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

class Matrix<T>{
private List<Attribute<T>> attributes;

public Matrix(T type){
attributes = new ArrayList<Attribute<T>>();
attributes.add(new Attribute<T>(type));
}
}

我觉得在构造函数中,这两行应该使用特定类型,而不是通用 T:

attributes = new ArrayList<Attribute<T>>();
attributes.add(new Attribute<T>(type));

但是编译器并没有提示。那么这是定义此类的正确方法吗?

最佳答案

是的,这是正确的方法。唯一可能出错的地方是构造函数中的参数不应该是名称类型,而是值。类型为 T。

如果需要,您可以说您的 Generic 必须是其他东西的子类型。假设我们有一个包含异常的类。我们可以创建一个异常类型的成员变量。但是当从这个对象内部获取异常时,我们不想将我们的异常转换为更具体的异常。

所以我们使用一个 Generic,它必须是 Exception 的子类型:

public class SomeClass<T extends Exception>
{
private final T value;

public SomeClass(T value)
{
this.value = value;
}

public T getValue()
{
return this.value;
}
}

现在我们可以做这样的事情:

SomeClass<ArrayIndexOutOfBoundsException> obj = new SomeClass<>(new ArrayIndexOutOfBoundsException());
ArrayIndexOutOfBoundsException exc = obj.getValue(); // no cast from Exception to ArrayIndexOutOfBoundsException needed

关于java - 这是在 Java 中使用泛型的正确方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44443303/

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