我正在寻找一个类似的概念来推断捕获的泛型类型,类似于下面的方法片段,然而,对于一个捕获泛型类型的类:
public <X, Y, Z> static void someMethod(ObjectInterface<X, Y, Z> object) {
// code that uses inferred generic type parameters X, Y and Z...
}
X
Y
和
Z
. 这允许在代码体中使用泛型类型变量,并使该方法在使用中更加灵活。在这个代码段中,如果调用方法时没有指定类型(即未参数化),那么Java将推断类型,即
someMethod(instaceOfImplementedObject)
将起作用,并将推断类型。
我的问题是,对于对象接口和实现该接口的对象,我有以下(简化)结构:
public interface ObjectInterface<X, Y, Z> {
//...
}
class ImplementedObject implements ObjectInterface<SomeType1, SomeType2, SomeType3> {
//...
}
然后我还有其他类,它们必须捕获相当多的泛型类型变量,其中一个是实现的对象
ObjectInterface<X, Y, Z>
十、
,
,
Z
)这是在捕获的对象中定义的。
以下代码(不理想,并且非常简化)有效:
public class ClassWorks<X, Y, Z, N extends ObjectInterface<X, Y, Z>> {
// code body uses X, Y, Z and N...
}
然而,对于试图使用/初始化此类的人来说,这是非常麻烦的,即使在这种简化版本中,例如:
public class ImplementedObject implements ObjectInterface<Integer, Double, String> {
//...
}
public class RandomExample {
public static void main(String[] args) {
ObjectInterface<Integer, Double, String> implementedObj = new ImplementedObject();
ClassWorks<Integer, Double, String, ImplementedObject>> example = new ClassWorks<Integer, Double, String, ImplementedObject>(/* possible params */);
}
}
有没有一种方法可以“提取”或捕获这些类型,以便对其进行推断,而不是显式的
ClassWorks
在工作示例中?
可能与以下类似(请注意,这不起作用):
pulic class WishfullClass<N extends ObjectInterface<X, Y, Z>> {
// type N is captured; X, Y and Z is not explicitly captured.
// code uses type N, as well as X, Y and Z
// where, X, Y and Z is inferred somehow from N.
}
编辑:
因此,WishfullClass的一个实现示例是:
public class ImplementedObject implements ObjectInterface<Integer, Double, String> {
//...
}
public class WishfullExample {
public static void main(String[] args) {
ObjectInterface<Integer, Double, String> implementedObj = new ImplementedObject();
WishFullClass<ImplementedObject> example = new WishfullClass<ImplementedObject>(/* possible params */);
}
}
编译器应该知道
ImplementedObject
ObjectInterface<Integer, Double, String>
如X、Y和Z。
请注意,以上这些都是非常简单的,在实际代码中并不是唯一需要捕获的参数,所以这三个额外的参数有很大的不同;此外,实现的对象还捕获泛型类型,
理想情况下,我只想集体捕捉扩展
ObjectInterface<十、 Y,Z>
而且有
十、
Y
和
推断。有办法做到这一点吗?
一、 e.someMethod的片段显示了如何推断方法范围的X、Y和Z。我的问题是,有没有一种方法可以通过只捕获扩展的类型来推断类的整个范围的X、Y和Z
ObjectInterface
.
我在措辞/解释这个问题时遇到了一些问题,因此如果有任何不确定性,请要求澄清:)