gpt4 book ai didi

java - 在它的抽象父类(super class)中使用子类的泛型类型?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:00:36 25 4
gpt4 key购买 nike

在我的代码中有以下抽象父类(super class)

public abstract class AbstractClass<Type extends A> {...}

还有一些子类比如

public class ChildClassA extends AbstractClass<GenericTypeA> {...}

public class ChildClassB extends AbstractClass<GenericTypeB> {...}

我正在寻找一种优雅的方式来以通用方式在抽象类中使用子类的通用类型(GenericTypeA、GenericTypeB 等)。

为了解决这个问题我目前定义了方法

protected abstract Class<Type> getGenericTypeClass();

在我的抽象类中并实现了方法

@Override
protected Class<GenericType> getGenericTypeClass() {
return GenericType.class;
}

在每个 child 类(class)。

是否可以在不实现此辅助方法的情况下获取抽象类中子类的泛型类型?

BR,

马库斯

最佳答案

我认为这是可能的。我看到这与泛型一起用于 DAO 模式。例如考虑类:

public class A {}
public class B extends A {}

还有你的泛型类:

  import java.lang.reflect.ParameterizedType;
public abstract class Test<T extends A> {

private Class<T> theType;

public Test() {
theType = (Class<T>) (
(ParameterizedType) getClass().getGenericSuperclass())
.getActualTypeArguments()[0];
}

// this method will always return the type that extends class "A"
public Class<T> getTheType() {
return theType;
}

public void printType() {
Class<T> clazz = getTheType();
System.out.println(clazz);
}
}

你可以有一个类 Test1,它用类 B 扩展了 Test(它扩展了 A)

  public class Test1 extends Test<B>  {

public static void main(String[] args) {
Test1 t = new Test1();

Class<B> clazz = t.getTheType();

System.out.println(clazz); // will print 'class B'
System.out.println(printType()); // will print 'class B'
}
}

关于java - 在它的抽象父类(super class)中使用子类的泛型类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3139018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com