有没有一种方法可以在给定条件的情况下只使用递归类型绑定字段



我是Java新手,来自Python,所以我对泛型不太了解,但我正在尝试创建一个包含value字段的通用Parameter类,该字段可以是intfloatstring或以前类型之一的数组:

public class Parameter<T> {
private final String name;
...
private final Utils.Range<T> range;
private final RANGE_TYPE range_type;
private final T value;
public enum RANGE_TYPE {CONTINUOUS, DISCREET};
...
/* constructor / builder class etc */
...
}

它还必须有一个范围,我已经实现如下:

public class Utils {
/**
* Collection of helper classes
*/
public static class Range<T extends Comparable<T>> {
/**
* Generic Inclusive Range (designed for int / float / double).
*/
private final T start;
private final T end;
public Range(T start, T end) {
this.start = start;
this.end = end;
}
public boolean contains(T number) {
return (number.compareTo(start) > 0 && number.compareTo(end) < 0);
}
}
}

我推送到这个Parameter类中的数据来自一个REST API,它为每个"块"吐出JSON(我还有一个Block类,它表示块的层次结构-基本上是一个DAG,但每个块都可以包含子块(。我想要一种通用的方法来封装这个参数数据,而不直接依赖于RESTneneneba API的数据结构。

问题是,Parameter类中的range字段和Range类本身之间的泛型类型不兼容。我不能让Parameter类扩展Comparable,因为T可以是一个容器(List、ArrayList等(。注意:如果T是一个容器类,则将按元素检查范围。

我是不是搞错了方向?在python中,我会将其实现为dict,而不必太担心值的类型。

Range的泛型类型和Parameter的泛型类型之间有依赖关系吗?

如果不是,您可以在Parameter类中的2个泛型参数中分离它们,如下所示。

public static class Parameter<T, R extends Comparable<R>> {
private final String name;
private final Range<R> range;
private final RANGE_TYPE range_type;
private final T value;

Range的泛型类型参数必须是Comparable。参数的泛型类型参数不一定是Comparable。

如果需要参数在内部创建Range,则该参数还必须强制执行此约束。

class Parameter<T extends Comparable<T>> 

顺便说一句,根据惯例,所有类和枚举都应该是驼色大小写。RANGE_TYPE应该是RangeType

相关内容

最新更新