我在Java1.5之前有一个旧的无类型类,需要使用Java Generics重构它以在代码中获得更多的类型安全性。
旧代码如下所示:
class Foo {
void setInput(Object input) {...}
}
现在这个输入可能是某个对象,但它也可能是一个数组,令人讨厌的东西。制作它的通用版本似乎并非无足轻重,我试过:
class Foo<E> {
void setInput(E input) {...}
void setInput(E[] input) {...}
}
问题是,这对于调用来说是不明确的:
Foo f = Foo<SomeClassyClass>();
f.setInput(null);
这个问题是否有一些很好的解决方案,还是我需要采取完全不同的方法?
谢谢, 帕特里克
答案 0 :(得分:6)
这种模糊性对于泛型并不是新的,但总是会出现重载方法。你必须施展null
:
Foo<String> f = new Foo<String>();
f.setInput((String[]) null);
f.setInput((String) null);
答案 1 :(得分:1)
在这种特殊情况下,你可以这样做:
Foo<SomeClassyClass> f = new Foo<SomeClassyClass>();
f.setInput((SomeClassyClass)null);
或:
Foo<SomeClassyClass> f = new Foo<SomeClassyClass>();
f.setInput((SomeClassyClass[])null);
解决这个问题。