我最初有一个界面,如下所示。
public interface testMe {
public Set<String> doSomething();
}
public class A implements testMe {
public Set<String> doSomething() {
return // Set<String>
}
}我有类似的实现testMe的类。现在我必须再添加一个返回Set<Some Object>的类
public class X implements testMe() {
public Set<Some OBject> doSomething() {
}
}如何在不破坏现有类的情况下在接口中添加此方法?
发布于 2010-06-02 09:15:42
你不能这样做有两个原因。
Set<...>实例在运行时都是简单的Set,因此它们无论如何都将具有完全相同的返回类型。您需要给第二个命名为不同的名称。
更复杂的答案是,您可以使参数类型可扩展:
public interface TestMe<T extends Serializable> {
Set<T> doSomething();
}
public class A implements TestMe<String> {
@Override
public Set<String> doSomething() { ... }
}
public class X implements TestMe<ASerializableObject> {
@Override
public Set<ASerializableObject> doSomething() { ... }
}发布于 2010-06-02 09:16:36
您可以使用
public interface testMe {
public Set<?> doSomething();
}或
public interface testMe {
public Set<? extends CommonSuperclass> doSomething();
}发布于 2010-06-02 09:17:53
我不相信你可以,因为类型擦除会破坏你所想要的效果。
您可以参数化该接口:
import java.util.Set;
public interface ISomething<T>
{
Set<T> doSomething(T [] data);
}以及实现方法:
import java.util.HashSet;
import java.util.Set;
public class Something<T> implements ISomething<T>
{
public static void main(String[] args)
{
Something<String> something = new Something<String>();
Set<String> set = something.doSomething(args);
System.out.println(set);
}
public Set<T> doSomething(T [] data)
{
Set<T> foo = new HashSet<T>();
for (T x : data)
{
foo.add(x);
}
return foo;
}
}不过,我不确定这是否实现了您的想法。
https://stackoverflow.com/questions/2954378
复制相似问题