我正在java中编写泛型函数,但是,我似乎无法判断是否有任何方法可以设置通用对象必须包含的类列表。
这样的事情:
public static <T in {String.class, Integer.class, Long.class}> Collection<T> test(Collection<T> val);
答案 0 :(得分:3)
例如,您可以Bounded Type Parameters这样:
public static <T extends String & Runnable> Collection<T> test(Collection<T> val);
但是你的例子不起作用,因为你有几个类,Java不支持多重继承。
此外,您的示例String
,Integer
和Long
为final
,因此无论如何都无法延期。
答案 1 :(得分:2)
没有。你不能在java中做到这一点。
你想要的是一个“或”的界限。 Java允许“AND”边界,例如:
List<T extends Runnable & Comparable<T>>
但不支持类似的“OR”:
List<T extends Integer | String> // doesn't compile
当你考虑它时,它没有任何意义。为每种类型绑定使用单独的类/方法。
答案 2 :(得分:1)
不幸的是,你无法做你在Java中尝试做的事情 - 如果它允许你从列表中指定泛型,你就可以编写一个在Integers或ArrayLists上运行的函数,这使得没有意义,因为他们不共享共同的功能。如果要将方法限制为某些类型,请找到它们都支持所需功能的基类/接口(public static <T extends BaseClass> Collection<T> test(Collection<T> val);
)或编写一组开发方法,每种类型对应一种类型支持。
答案 3 :(得分:1)
嗯,你可以,也可以不能同时。
在您的具体示例中,这是不可能的。
但这样的例子可行:
public <T extends CharSequence & Comparable & Closeable> void go(){
对于你的情况,我会选择:
public <T extends Number & CharSequence> void go() // same rule applies as extend a class and implement as many interfaces as you want
答案 4 :(得分:0)
你做不到。泛型仅用于强制类型安全(保证类型可以执行特定方法等)。没有类型安全要求对应于这种“OR”界限。对类型安全的要求仅需要“与”界限。