我正在尝试实现泛型类,该类定义对象的顺序。这是我的代码片段: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数组,并返回数组。不幸的是,我编写的代码无法编译,它说无法引用静态字段T,因为T不是静态的。为什么T不是静态的?另外,有没有解决这种情况的方法? (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 在类上定义的类型参数T仅在非static上下文中具有作用域。它不在static方法的范围内。但是,您始终可以为static方法本身声明另一个类型参数。请注意,此T与类的T不同。只要对T方法中对static的引用也进行了相应的重命名,就可以对其进行重命名而不会影响任何内容。public static <T> ArrayList<OrderedObject<T>> defineOrder(ArrayList<T> objects) {Section 8.1.2 of the JLS指出: 在以下任何情况下引用通用类C的类型参数都是编译时错误: C的静态成员的声明(第8.3.1.1节,第8.4.3.2节,第8.5.1节)。 嵌套在C中的任何类型声明的静态成员的声明。 C的静态初始值设定项(第8.7节),或者 嵌套在C中的任何类声明的静态初始化器。 (强调我的)关于java - Java-在静态函数中构造泛型类的多个对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30248354/ (adsbygoogle = window.adsbygoogle || []).push({});
10-09 08:10