作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Java1.5 之前的旧无类型类,需要使用 Java 泛型对其进行重构,以便在代码中获得更多类型安全性。
旧代码如下所示:
class Foo {
void setInput(Object input) {...}
}
现在这个输入 可能是一些对象,但它也可能是一个数组,讨厌的东西。制作它的通用版本似乎并不简单,我尝试过:
class Foo<E> {
void setInput(E input) {...}
void setInput(E[] input) {...}
}
问题是这对于调用来说是模棱两可的:
Foo f = Foo<SomeClassyClass>();
f.setInput(null);
这个问题是否有好的解决方案,或者我是否需要采取完全不同的方法?
谢谢,帕特里克
最佳答案
这种类型的歧义对于泛型来说并不新鲜,但在重载方法中总是会发生。您必须转换 null
:
Foo<String> f = new Foo<String>();
f.setInput((String[]) null);
f.setInput((String) null);
关于Java 泛型重构和歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3468330/
我是一名优秀的程序员,十分优秀!