我在寻找一个类似的推断拍摄的泛型类型,类似于下面的方法片段的概念,但不是为捕获泛型类:推断的Java泛型类型
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>
的对象。在这样的类中,我还需要处理在捕获的对象中定义的类型(X
,Y
,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<X, Y, Z>
,并有X
,Y
和Z
推断的对象。有没有办法做到这一点?
即使someMethod的片段展示了如何推断方法范围的X,Y和Z.我的问题指的是,是否有办法通过仅捕获延伸ObjectInterface
的类型来推断整个课程范围内的X,Y和Z.
我遇到了一些麻烦措辞/解释这个问题,所以如果有任何不确定性,请要求澄清:)
您可以使用类型变量(如任何其他变量)的唯一方法是将该类型变量作为范围。所以要么你必须声明它,要么在包含范围内必须有一个已经可见。 –
@AndyTurner是:)这是问题来自哪里。所以我知道如何推断变量X,Y,Z(不必明确指定变量 - 给出扩展ObjectInterface的对象就足够了),一个方法,显示在第一个小代码片段中,并在问题开始时解释。我的问题涉及到,是否可以通过扩展ObjectInterface的类型参数N来推断X,Y和Z,但是可以用于类的整个范围。 –
Smiley