Java泛型 VS C# where关键字

4

我在一个C#项目中有一个方法,它看起来像这样:

public T AddEC<T>() where T : EntityComponent, new() {
    if (!HasEC<T>())
    {
      T nComponent = new T();
    }
}

我最近才开始正式使用Java泛型,但我不知道如何移植像这样的方法,或者是否由于语言限制而无法移植,有人能帮忙吗?


1
我发了一篇关于这个的帖子 http://www.anicehumble.com/2012/05/c-said-java-said-oop-for-generics.html - Michael Buen
这不仅仅是关于擦除的问题,即使Java具有实例化泛型,它可能也不支持这样的结构类型。 - gustafc
你是上天派来的 Michael Buen。谢谢! - DominicEU
3
顺便说一下,我非常不同意这被称为“过于局限”。我怀疑提问者并不是唯一一个想了解Java泛型的C#开发人员... - gustafc
2个回答

2

这是一篇非常好的文章。

http://www.jprl.com/Blog/archive/development/2007/Aug-31.html

来自该来源。

Java type and method constraints are specified using a "mini expression language" within the '<' and '>' declaring the generic type parameters. For each type parameter that has constraints, the syntax is:

TypeParameter ListOfConstraints 

Where ListOfConstraints is a '&'-separated list of one of the following constraints:

  • Specifying a base class or implemented interface on the Generic Type Argument by using: extends BaseOrInterfaceType

('&' must be used instead of ',' because ',' separates each generic type parameter.)


2

这里有一个例子

class GenericClass<T extends Number & Comparable<T>> {
    void print (T t) {
        System.out.println (t.intValue ()); // OK
    }
}

在这个例子中,Number和Comparable是约束条件,就像它们在C#类声明的where子句中出现的那样。

在我的例子中,我没有在C#类的定义中使用where,它只是一个类中方法的示例。我基本上了解如何限制约束,特别是在类中。我尝试创建一个定义如下的方法(在Java中)public <T extends EntityComponent> T addEC(Class<T> entity) {但那并不能真正做到我想要的。我需要它像我的C#示例一样工作。 :( - DominicEU

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接