如何在Java中创建一个通用方法?

17

我有以下方法:

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

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

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

出于好奇,我想知道是否有一种使用Java泛型的方法可以实现这个:

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

在Java中有没有一种方法可以实现这个?


如果它们有共同点,那么是的。但是您必须查看findByName()返回了什么。 - nachokk
通用方法看起来像这样。是的,Java泛型真的很简单,就像这样:public static <T extends Object> void name(T obj){} - tom
2
你的例子毫无意义。为什么要使用 Object 参数,然后再用 obj = findByName(name); 重新分配它呢? - Paul Bellora
1个回答

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

请注意,在这种情况下,T将是可重用的。可以传递Foo<T>(它本身包括可以从instanceOfT.getClass()获取的Class<T>)或者传递T本身。

1
方法不是“返回T”(void)。 - user180100
@RC。抱歉,我把这个帖子和另一个关于泛型的帖子搞混了。 - nanofarad
感谢您的及时回复。我发现我仍然需要写“static <T> void”,否则'T'无法解析。我是否误解了上面的评论?此方法的调用是什么样子的? - TERACytE
1
谢谢您的澄清。不过,我不确定这种方式相比于“void update (String name, Object obj)”有什么优势,因为我没有返回相同类型的内容。看起来,当使用上述示例时,我仍然需要创建“someObject”(例如,update("foo", new CustomTextType()))。是这样吗? - TERACytE
1
@TERACytE,在这里使用通用方法没有任何优势。 - Paul Bellora
显示剩余2条评论

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