Java接口设计
我最初有一个界面,如下所示Java接口设计,java,Java,我最初有一个界面,如下所示 public interface testMe { public Set<String> doSomething(); } public class A implements testMe { public Set<String> doSomething() { return // Set<String> } } 公共接口testMe{ 公共设置doSomething();
public interface testMe {
public Set<String> doSomething();
}
public class A implements testMe {
public Set<String> doSomething() {
return // Set<String>
}
}
公共接口testMe{
公共设置doSomething();
}
公共类A实现testMe{
公共设置剂量计(){
返回//集
}
}
我有类似的类来实现testMe。现在我必须再添加一个返回Set
public类X实现testMe(){
公共设置剂量计(){
}
}
如何在不破坏现有类的情况下将此方法添加到接口中?原因有二
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() { ... }
}
公共接口TestMe{
设置doSomething();
}
公共类A实现TestMe{
@凌驾
公共集doSomething(){…}
}
公共类X实现TestMe{
@凌驾
公共集doSomething(){…}
}
您可以使用
public interface testMe {
public Set<?> doSomething();
}
公共接口testMe{
公共设置doSomething();
}
或
公共接口testMe{
公共集我不相信你能,因为类型擦除会破坏你心目中的效果
您可以参数化接口:
import java.util.Set;
public interface ISomething<T>
{
Set<T> doSomething(T [] data);
}
import java.util.Set;
公共接口
{
设置剂量测量(T[]数据);
}
以及实施:
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;
}
}
import java.util.HashSet;
导入java.util.Set;
公共类的东西
{
公共静态void main(字符串[]args)
{
新事物;
Set=something.doSomething(args);
系统输出打印项次(套);
}
公共设置剂量测量(T[]数据)
{
Set foo=new HashSet();
对于(T x:数据)
{
foo.add(x);
}
返回foo;
}
}
不过,我不确定这是否能实现您的想法。这里的问题是,我没有直接实例化具体的类,而是封装在工厂方法中。一个如何围绕它编写工厂方法,返回ISomething以及ISomething。如果我们甚至参数化工厂,那么问题就转移到了方法。它必须决定返回什么。
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;
}
}