Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.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 类别<;?实现X>;:如何定义作为此实例的变量_Java_Class_Casting_Hierarchy_Entities - Fatal编程技术网

Java 类别<;?实现X>;:如何定义作为此实例的变量

Java 类别<;?实现X>;:如何定义作为此实例的变量,java,class,casting,hierarchy,entities,Java,Class,Casting,Hierarchy,Entities,我有很多不同的课程 有些实现了X,而另一些则没有 我现在需要访问实现X的此类类的一个特定实例,并且还希望避免许多不必要的强制转换 我不能简单地说MyClass实例 我也不能使用X实例,因为我确实需要访问该类的方法 我也不能让一个OtherClass扩展MyClass实现X,因为我的大多数类已经在扩展MyClass,但我不想让我的所有子类都实现X 因此,我正在寻找一种定义变量类型的方法,这种方法可以编写如下内容: MyClass您可以使用具有多个边界的泛型: <T extends MyCla

我有很多不同的课程

有些实现了X,而另一些则没有

我现在需要访问实现X的此类类的一个特定实例,并且还希望避免许多不必要的强制转换

我不能简单地说
MyClass实例


我也不能使用
X实例
,因为我确实需要访问该类的方法

我也不能让一个
OtherClass扩展MyClass实现X
,因为我的大多数类已经在扩展MyClass,但我不想让我的所有子类都实现X

因此,我正在寻找一种定义变量类型的方法,这种方法可以编写如下内容:
MyClass您可以使用具有多个边界的泛型:

<T extends MyClass & X> void someFunction(T t){
}
void someFunction(T){
}

这将强制执行
someFunction
的参数将是
MyClass
X
的子类型,并允许您访问
MyClass
X

的成员,因为我确实需要访问该类的方法。那么您最好的选择是
MyClass实例
。什么是“清晰的理由”意味着你不能这样做?@AndyTurner想象其他人会加入代码库。(S) 他可能会将未实现X的MyClass实例分配给变量实例,这将导致错误。此外,我还需要访问X中的方法。啊,所以与清晰度无关吗?:)(清晰度=>可读性;你说的是类型安全)@AndyTurner Riight,对不起,把这两个搞混了!