.Net和Java中的静态泛型方法

4

我不确定某些事情。

在C#中,我可以做以下事情。

public class Helper<T> where T : new()
{
    public static T SomeHelperFunction(string strValue)
    {
        return new T();
    }
}

在这里,静态方法可以清楚地利用传递给Helper类的类型。

这是我在Java/Android中的确切尝试:

public class Helper<T> {
    public static T SomeHelperFunction(String strValue){
        //some code
    }
}

Java对SomeHelperFunction中使用的T感到不满。为什么.NET允许这样做,而Java不行,还是我漏掉了什么?

我该如何在Java中创建.NET类?


1
public static <T> T SomeHelperFunction(String strValue) 是怎么样的?请参考 https://docs.oracle.com/javase/tutorial/extra/generics/methods.html。 - MakePeaceGreatAgain
如果您能提供您所遇到的错误信息,那将会很有帮助。 - Jorn Vernee
1个回答

4
你可以做到这一点。
public class Helper<T> {
public static <T> T SomeHelperFunction(String strValue){
    //some code
}
}

在Java中,静态泛型方法需要有它们自己的泛型声明;


如果我将类型传递给 Helper 类,那么静态方法中的类型会自动推断吗? - monstertjie_za
在这种情况下不需要 class Helper<T>,只需要 class Helper - khelwood
1
@khelwood 这个问题明确涉及到泛型类型参数是否从类本身继承,因此尽管在这个例子中它并不是真正需要的,但它符合问题的设置。 - MakePeaceGreatAgain
1
在这里使用类参数 T 是一个糟糕的想法,因为它与答案的正确性相反。在静态方法的通用参数中使用相同的符号 T 是可怕的做法,因为它会导致极大的混淆。糟糕的答案和更糟糕的缺陷辩解。被踩了。 - Lew Bloch

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