如何在java泛型中定义类型参数的静态字段
我想定义这样一个时间接口:如何在java泛型中定义类型参数的静态字段,java,oop,generics,interface,static,Java,Oop,Generics,Interface,Static,我想定义这样一个时间接口: public interface TimeInterface<T> { static T ZERO; static T INFINITY; // some other methods... } 公共接口时间接口 { 静态t0; 静态T无穷大; //其他一些方法。。。 } 这是否可能,或者如何避免错误 提前谢谢 直接从 我们不能声明类型为类型参数的静态字段 类的静态字段是由类的所有非静态对象共享的类级变量。因此,类型参数的静态字段
public interface TimeInterface<T>
{
static T ZERO;
static T INFINITY;
// some other methods...
}
公共接口时间接口
{
静态t0;
静态T无穷大;
//其他一些方法。。。
}
这是否可能,或者如何避免错误
提前谢谢 直接从
我们不能声明类型为类型参数的静态字段
类的静态字段是由类的所有非静态对象共享的类级变量。因此,类型参数的静态字段是不允许的。考虑下面的类:
public class MobileDevice<T> {
private static T os;
// ...
}
公共类移动设备{
私有静态操作系统;
// ...
}
如果允许类型参数的静态字段,则会混淆以下代码:
MobileDevice<Smartphone> phone = new MobileDevice<>();
MobileDevice<Pager> pager = new MobileDevice<>();
MobileDevice<TabletPC> pc = new MobileDevice<>();
MobileDevice phone=新的MobileDevice();
MobileDevice pager=新的MobileDevice();
移动设备pc=新的移动设备();
因为手机、寻呼机和pc共享静态域os,所以实际的os类型是什么?它不能同时是智能手机、寻呼机和
TabletPC
。因此,您不能创建类型参数的静态字段。唯一可以包含类型参数的静态
方法是静态
方法,它必须定义自己的类型参数。比如:
static <T> void staticGenericMethod(T param) { .. }
请注意,X
类型参数仅对相应的静态方法有效,不在类中共享
然而,这种方法的问题是无法确保实例类型参数(T
)与静态方法的类型参数(X
)相同,如果使用不当,可能会导致严重问题
还要注意的是,Java8中的接口中允许使用
静态
方法,因此,如果您使用的是order Java版本,则应将时间接口
转换为类。感谢您的详细回答!非常好的例子谢谢你详细的回答!
public interface TimeInterface<T> {
static <X> X getZero() {
//implementation
}
static <X> X getInfinity() {
}
}