与params的接口

时间:2014-01-19 10:13:17

标签: java interface

我在3个不同的类中使用相同的界面,

但是,这3个类需要有不同的参数来处理,并且所有类都必须命名为

例如我有这个界面

public interface ITest<T>{

 public T test1();
 public T test2();
 public T test3();
}

我有3个班级

A,B,C实现具有不同T型参数的所有ITest

但是,我需要一个类来使用这个方法:

test1(String a, String b);

B类有这个方法:

test1();

C类有这个方法:

test1(boolean b);

这可能使用相同的界面吗?或者这些类需要3个不同的接口吗?

注意:我可以像这样编写我的界面:(假设括号中的所有类型都相同)

public interface ITest<T,S>{
 public T test1(S...params);
 public T test2();
 public T test3();

}

然而,这意味着1:所有参数必须相同,2在不需要任何参数的方法中,仍然存在参数

2 个答案:

答案 0 :(得分:5)

您的示例中的3个方法test1是完全不同的方法,因为它们不共享相同的参数集。

相同的接口意味着一组由几个类共享的方法(在您的示例中为A,B,C)。所以这里你的3个类中没有相同的接口(因为它们的test1方法不同)。你有3个不同的接口。

好的,如果你的3个类共享相同的test2和test3方法(但不是test1方法), 然后只需从您的界面中取出test1方法。

答案 1 :(得分:0)

方法test1()有一个不同的签名imho,所以我不会使用相同的界面。 var arg方法有什么好处,它真的有用还是更有限?不要仅仅从类似的方法签名创建接口,而是从相同的用例创建接口。

这可能是使用接口隔离原则(ISP)与以下接口的一个很好的示例:

public interface ITest<T> {
  public T test2();
  public T test3();
}

public interface ITestA<T> {
  public T test1(String a, String b);
}

public interface ITestB<T> {
  public T test1();
}

public interface ITestB<T> {
  public T test1(boolean b);
}

所以一个实现可以实现适当的接口(我不确定你的例子中的实现的正确的通用参数):

class A implements ITest<String>, ITestA<String> {...}

class B implements ITest<Integer>, ITestB<Integer> {...}

class C implements ITest<MyClass>, ITestC<MyClass> {...}

但是确保你需要不同的方法作为接口,Adam Bien会说; - )