问题 如何在Java中创建泛型方法?


我有以下方法:

public static void update(String name) {
    CustomTextType obj = findByName(name);
    ...
}

我想使它成为一种通用的方法,这样我就不需要为每个新的自定义类型编写新的代码。我可以这样做,这需要在调用update()之前实例化对象:

public static void update(String name, Object obj) {
    obj = findByName(name);
    ...
}

出于好奇,我想知道是否有办法使用Java Generics做到这一点:

// note: this is an example and does not work
public static void update(String name, <T> type) {
    type var = findByName(name);
    ...
}

有没有办法在Java中实现这一目标?


9344
2017-09-18 19:52


起源

如果他们有共同点,那么是..但你必须看到什么回报 findByName() - nachokk
通用方法看起来像这样。是的java泛型非常简单,就像这个公共静态<T extends Object> void name(T obj){} - tom
你的例子毫无意义。你为什么要拿一个 Object 参数仅用于重新分配 obj = findByName(name); ? - Paul Bellora


答案:


public static <T> void update(String name, T type) {
    //logic dealing with `T`.
}

注意 T 在这种情况下将是可以回收的。或 Foo<T>(其本身包括 Class<T> 可以从中获得 instanceOfT.getClass()) 要么 T 本身已经过去了。


10
2017-09-18 19:54



方法不是“返回T”(void)
@RC。对不起,这与另一篇关于泛型错误的帖子混淆了。 - Andrey Akhmetov
感谢您的快速回复。我发现我仍然需要编写“static <T> void”,否则“T”无法解析。我误解了上面的评论吗?此外,对此方法的调用是什么样的? - TERACytE
谢谢你的澄清。我不确定这是什么优势超过“void update(String name,Object obj)”,因为我没有返回相同的类型。在使用上面的例子时,我似乎需要创建“someObject”(例如update(“foo”,new CustomTextType()))。正确? - TERACytE
@TERACytE是的,这里使用通用方法没有任何优势。 - Paul Bellora