2

我在 Java 中使用泛型和几个类。我想找到一种方法来减少我需要添加的参数数量。

public abstract class KeyValueProducer<O,K,V> {
  ....
}

public class KeyValueProducerMapper<O,K,V,KVP extends KeyValueProducer<O,K,V>> {

  public static <O,K,V,KVP extends KeyValueProducer<O,K,V>> KeyValueProducerMapper<O,K,V,KVP> create(Set<KVP> set) {
      return new KeyValueProducerMapper(set);
  }

  public KeyValueProducerMapper(Set<KVP> kvps) {
        ...
  }

  public V getVal(K key) {
      return map.get(key).getValue();       
  }
}

当我想创建我的 KeyValueProducerMapper 的实例时,看起来我需要写出:

Set<KVP> set;
....
KeyValueProducerMapper<K,V,O,KVP> kvpm = new KeyValueProducerMapper(set);

这似乎有点冗长和荒谬。有什么办法可以像这样定义它吗?

KeyValueProducerMapper<KVP> kvpm = new KeyValueProducerMapper(set);
4

1 回答 1

1

从您的示例中不清楚 K、V 和 O 用于什么类型参数。但是对于KeyValueProducerMapper类的这种声明,您不能将其声明为KeyValueProducerMapper<KVP> = .... 您必须将其声明为KeyValueProducerMapper<O,K,V,KVP> = ...(使用 O、K、V、KVP 的具体类型或在父范围内指定这些类型参数,即方法或类)。唯一的替代方法是将类声明更改为没有类型参数 K、V 和 O。

至于表达式的右侧部分,您可以使用静态create()方法而不指定类型参数,因为将从表达式的左侧部分解析。

于 2012-11-01T16:30:58.853 回答