我正在尝试实现定义对象顺序的泛型类.这是我的代码片段:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
在defineOrder()我试图一次初始化这个类的多个对象 - 我希望顺序由数组中的泛型对象的位置定义,这个静态函数将采用通用对象T数组,并返回OrderedObject<T>数组.不幸的是,我编写的代码将无法编译,它表示无法对静态字段T进行引用,因为T不是静态的.
为什么T不是静止的?还有,有办法解决这种情况吗?
类上T定义的类型参数仅在非static上下文中的范围内.它不在范围内的static方法中.
但是,您始终可以为static方法本身声明另一个类型参数.请注意,这T与班级不同T.只要T对static方法内部的引用也相应地重命名,它可以在不影响任何内容的情况下重命名.
public static <T> ArrayList<OrderedObject<T>> defineOrder(ArrayList<T> objects) {
Run Code Online (Sandbox Code Playgroud)
JLS第8.1.2节规定:
在以下任何一项中引用泛型类C的类型参数是编译时错误:
该静态成员的声明的C(§8.3.1.1,§8.4.3.2,第8.5.1节).
嵌套在C中的任何类型声明的静态成员的声明
C(第8.7节)的静态初始化程序,或
嵌套在C中的任何类声明的静态初始化程序.
(强调我的)
| 归档时间: |
|
| 查看次数: |
137 次 |
| 最近记录: |