Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java泛型中定义类型参数的静态字段_Java_Oop_Generics_Interface_Static - Fatal编程技术网

如何在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() {

    }
}