gpt4 book ai didi

Java - 在静态函数中构造泛型类的多个对象

转载 作者:行者123 更新时间:2023-12-03 21:24:42 32 4
gpt4 key购买 nike

我正在尝试实现定义对象顺序的通用类。这是我的代码片段:

import java.util.ArrayList;

public class OrderedObject<T> implements Comparable<OrderedObject<T>> {

private T object;
private int orderId;

public OrderedObject(T object, int orderId) {
this.object = object;
this.orderId = orderId;
}

public T getObject() {
return object;
}

public static ArrayList<OrderedObject<T>> defineOrder(ArrayList<T> objects) {
ArrayList<OrderedObject<T>> orderedObjects = new ArrayList<OrderedObject<T>>();
for (int i = 0; i < objects.size(); i++) {
T object = objects.get(i);
OrderedObject<T> orderedObject = new OrderedObject<T>(object, i);
orderedObjects.add(orderedObject);
}
return orderedObjects;
}

@Override
public int compareTo(OrderedObject<T> o) {
return orderId - o.orderId;
}

}

defineOrder()我正在尝试一次初始化此类的多个对象 - 我希望顺序由数组中通用对象的位置定义,并且此静态函数将采用通用对象 T数组,并返回 OrderedObject<T>大批。不幸的是,我写的代码无法编译,它说无法引用静态字段 T,因为 T 不是静态的。

为什么 T 不是静态的?另外,有没有办法摆脱这种情况?

最佳答案

在类上定义的类型参数 T 仅在非 static 上下文中的范围内。它不在 static 方法的范围内。

但是,您始终可以为 static 方法本身声明另一个类型参数。请注意,此 T 与类的 T 不同。它可以在不影响任何东西的情况下重命名,只要在 static 方法中引用 T 也相应地重命名。

public static <T> ArrayList<OrderedObject<T>> defineOrder(ArrayList<T> objects) {

Section 8.1.2 of the JLS状态:

It is a compile-time error to refer to a type parameter of a generic class C in any of the following:

  • the declaration of a static member of C (§8.3.1.1, §8.4.3.2, §8.5.1).

  • the declaration of a static member of any type declaration nested within C.

  • a static initializer of C (§8.7), or

  • a static initializer of any class declaration nested within C.

(强调我的)

关于Java - 在静态函数中构造泛型类的多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30248354/

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