嵌套通用类型中的通用类型参数 - java

我已经将此接口编写为框架的一部分。

public interface CollectionFactory {

    public <T> Collection<T> newCollection();
}

但是我希望实现者能够定义集合的返回类型,这样他们就不必像这样强制转换:

public interface CollectionFactory<C extends Collection> {
    public C newCollection();
}

问题是我然后失去了对T的类型安全性。

public interface CollectionFactory<C extends Collection> {
     public <T> C<T> newCollection();
}

而且我不想像这样预先指定T:

public interface CollectionFactory<T, C extends Collection<T>> {
    public C newCollection();
}

就我所知,这是不可能的。
有人想给我一个惊喜吗?

另外,就像开胃菜一样,有人知道……斯卡拉是否有可能做到类似的事情?

参考方案

在Scala中,如果要通过以下方式对CT进行参数化,则可以使用higher-kinded types:

// means that C has a single type parameter and C[T] extends Seq[T] whatever T is
// or C[_] <: Seq[_] which means C[T] must extend Seq[Something] but not necessarily Seq[T]
trait SeqFactory[C[T] <: Seq[T]] { 
  def newSeq[T]: C[T]
}

示例实现:

object ListFactory extends SeqFactory[List] { 
  def newSeq[T] = List() 
}

您是正确的,这不能用Java完成,但是根据目的,即使它们的类型安全性较低,@ Dylan或@CostiCiudatu的解决方案也可能足够好。

Java:我可以在Hashmaps中使用数组吗? - java

我可以在Hashmaps中使用数组吗?如果是这样,则声明这种哈希图的确切语法是什么?谢谢 参考方案 数组也是对象。甚至像int[]这样的原始数组。Map<String,String[]> map = new HashMap<String,String[]>();

Java GUI外观变化 - java

我是编程的新手,但是我正在准备编写Java程序。在计划时,我正在尝试为其找到合适的GUI。我发现带有GUI选项的this页面。我有两个问题:这些可以插入Java GUI构建器吗? 构建程序后更改GUI外观有多容易(或很难)? 参考方案 更改程序的外观很简单:UIManager.setLookAndFeel("fully qualified name…

Java:正则表达式模式匹配器是否有大小限制? - java

我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)

Java中的“ <<”运算符 - java

最喜欢的语句来自Java的Character类:(1 << Character.PARAGRAPH_SEPARATOR)) >> type PARAGRAPH_SEPARATOR是字节,type是整数。这句话中的操作员,他们做什么?如何以及在哪里可以使用这些运算符?这是oracles java.lang.Character文档。该类中…

Java:线程池如何将线程映射到可运行对象 - java

试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …