gpt4 book ai didi

Java 泛型 : Restricting a class to specific implementations.

转载 作者:行者123 更新时间:2023-11-30 08:10:49 25 4
gpt4 key购买 nike

我有以下类层次结构:

public abstract class Config<T> implements Proxy<T> {
public abstract T parse();
public T get() {....}
}

public class IntegerConfig<Integer> extends Config<Integer> {
public Integer parse() {...}
}

public class LongConfig<Long> extends Config<Long> {
public Long parse() {...}
}

public class IntegerListConfig<List<Integer>> extends Config<List<Integer>> {
public List<Integer> parse() {....}
}

等等……

我想介绍一个新类:

public class ConfigMutation<T> implements Proxy<T> {
public ConfigMutation(....) {
//// create a concrete implementation of Config<T> according to actual parameterized type
}
}

本质上,我想避免重复 Config 的整个类层次结构,并在 ConfigMutation 中支持在 Config 类层次结构中具有参数化实现的所有类型。

找不到解决方法。 (Class<T>)((ParameterizedType)getClass().getGenericInterfaces()[0]).getActualTypeArguments()[0]显然返回 T,而不是实际类型。

此外,一旦这个问题得到解决,如果有人可以建议一些具有泛型类型的工厂模式,我会很高兴,所以当我在 ConfigMutation 中实例化 Config 派生类时,我不必使用巨大的 if...else block 在实际类型上。

谢谢,里尔

最佳答案

更改您的 ConfigMutation类:

public class ConfigMutation<U,T extends Config<U>> implements Proxy<U> {
public ConfigMutation() {

}
}

然后您可以使用 ConfigMutation作为:

ConfigMutation<Integer,IntegerConfig> mutation;

您将无法执行以下您想要的操作:

ConfigMutation<String,IntegerConfig> mutation;

也就是说,您需要对混凝土 Config 进行更改实现者也是如此。例如,更改 IntegerConfig到:

public class IntegerConfig extends Config<Integer> {
public Integer parse() {...}
}

IntegerIntegerConfig<Integer>将被视为类型参数而不是 Integer这不是你想要的类。 (IDE 应该为此向您发出警告;Integer 类型参数隐藏了 Integer 类型)

关于Java 泛型 : Restricting a class to specific implementations.,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31499048/

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