Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.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_Generics - Fatal编程技术网

返回类中使用的泛型类型的泛型类型的Java方法

返回类中使用的泛型类型的泛型类型的Java方法,java,generics,Java,Generics,这是我想实现的简单代码结构: public class B {} public class A<X extends B> { X x; public A(X x) {this.x = x;} public X getX() {return x;} } public class C<A> { public A getA() {return null;} public A<T> T getGenericXOfA

这是我想实现的简单代码结构:

public class B {}
public class A<X extends B> {
    X x;
    public A(X x) {this.x = x;}
    public X getX() {return x;}
}
public class C<A> {
    public A getA() {return null;}       
    public A<T> T getGenericXOfA() {return getA().getX();}
}
公共类B{}
公共A类{
X;
公共A(X){this.X=X;}
public X getX(){return X;}
}
公共C类{
public A getA(){return null;}
public A T getGenericXOfA(){return getA().getX();}
}
我想通过使用“getGenericXOfA”方法返回类A的泛型参数处使用的类型来访问我的类C。 这在Java中是可能的吗?我想做这样的事:

public class C<A<X>> {
    public A getA() {return null;}       
    public X getGenericXOfA() {return getA().getX();}
}
公共C类{
public A getA(){return null;}
public X getGenericXOfA(){return getA().getX();}
}
还是那样

public class C<A> {
    public A getA() {return null;}       
    public A<T> T getGenericXOfA() {return getA().getX();}
}
公共C类{
public A getA(){return null;}
public A T getGenericXOfA(){return getA().getX();}
}

当您需要通过扩展
B
X
对其进行泛化时,您使用了原始类型的
a

class C<X extends B> {

    public A<X> getA() { ... }

    public X getGenericXOfA() {
        return getA().getX();
    }

}
C类{
公共A getA(){…}
public X getGenericXOfA(){
返回getA().getX();
}
}
实际上,您正在使用泛型参数的名称。它们不重要,也不能引用现有的类

如果您想要与其他类相同的泛型类型,则应重复相同的模板。

您可以执行以下操作:

public class C<X extends B, Y extends A<X>> {
    public Y getA() {return ... }       
}
公共C类{
public Y getA(){return…}
}

如果他们没有提到,我就不能在更富裕的班级做这样的事情,比如:公共A类和C{Y getYofA()X getXofA()},或者有办法做到这一点吗?@TheTonsOfCode,你不能。如果
C
未被
X
Y
参数化,则代码不会编译。它们只是名称,与类
A
及其泛型参数
X
Y
@TheTonsOfCode无关。如果您解释了您试图实现的目标,我建议您采取一种解决方法。