Java 当方法具有不同参数时制作接口

Java 当方法具有不同参数时制作接口,java,interface,Java,Interface,我最近制作了一个小程序,包括包装一个JFreeChart库,并制作了许多方便的类,以方便地制作图表,并提供扩展JPanel的现成对象,可以轻松地放置在周围,并意识到所有的类都具有基本相同的功能和非常相似的参数。对我来说,创建一个接口并使每个类实现它是有意义的,但是有一个小问题 每种类型的图表都需要设置稍有不同的参数,例如piechart不关心时间轴,条形图有非常独特的时间点,折线图假装是实时的,等等 我知道一个参数可以在接口中指定为泛型类型,在方法的实现中定义为具体类型,但我从来没有见过数量可变

我最近制作了一个小程序,包括包装一个JFreeChart库,并制作了许多方便的类,以方便地制作图表,并提供扩展JPanel的现成对象,可以轻松地放置在周围,并意识到所有的类都具有基本相同的功能和非常相似的参数。对我来说,创建一个接口并使每个类实现它是有意义的,但是有一个小问题

每种类型的图表都需要设置稍有不同的参数,例如piechart不关心时间轴,条形图有非常独特的时间点,折线图假装是实时的,等等

我知道一个参数可以在接口中指定为泛型类型,在方法的实现中定义为具体类型,但我从来没有见过数量可变的参数,所以我创建了大量重载方法,这让我想到:

“正确”的方法是什么

  • 就像我做的那样(懒惰的方式)-在接口中将每个方法定义为重载,并使未使用的方法在错误的类中调用时抛出异常
  • 创建一个容器对象并传递它(传递包含例如饼图的时间序列数据的对象似乎是浪费资源)
  • 完全放弃对接口的使用,因为它不完全适合这种情况,并创建非常相似的单独类
  • 还有别的吗
  • 如果你提出一种或另一种选择,我想给出答案的理由。
    我选择1的理由。它使目的非常明确,但它确实似乎违反了界面背后的原则。

    我将使用Builder模式作为参数我只需要两分钱。。。使用varargs。可能您可以将第一个参数作为枚举,说明对象的vararg类型,第二个参数-不提供类型安全性,但通过有限的代码解决问题。这不是参数太多的问题,而是许多参数都是特定于大小写的,因此我认为构建器不会解决我的问题。Vararg可能是一种方法,但同样-传递一个容器类作为唯一的参数并从中提取所需的数据会更安全吗?如何定义一个具有相同参数的所有方法的基接口,并将其扩展到“特殊”的特殊接口图表类型?@PavanKumar这需要检查每个参数的
    instanceof
    ,并按预定义顺序为每个字段分配其值。因此,在这种情况下,提供地图是不可取的。为了尽可能地通用,但尽管有编译安全性,您可以使用参数对象,甚至在实例之间使用继承。生成器模式只是创建它们的一种方法()我将使用生成器模式作为参数我只需要两美分。。。使用varargs。可能您可以将第一个参数作为枚举,说明对象的vararg类型,第二个参数-不提供类型安全性,但通过有限的代码解决问题。这不是参数太多的问题,而是许多参数都是特定于大小写的,因此我认为构建器不会解决我的问题。Vararg可能是一种方法,但同样-传递一个容器类作为唯一的参数并从中提取所需的数据会更安全吗?如何定义一个具有相同参数的所有方法的基接口,并将其扩展到“特殊”的特殊接口图表类型?@PavanKumar这需要检查每个参数的
    instanceof
    ,并按预定义顺序为每个字段分配其值。因此,在这种情况下,提供地图是不可取的。为了尽可能地通用,但尽管有编译安全性,您可以使用参数对象,甚至在实例之间使用继承。生成器模式只是创建它们的一种方法()我将使用生成器模式作为参数我只需要两美分。。。使用varargs。可能您可以将第一个参数作为枚举,说明对象的vararg类型,第二个参数-不提供类型安全性,但通过有限的代码解决问题。这不是参数太多的问题,而是许多参数都是特定于大小写的,因此我认为构建器不会解决我的问题。Vararg可能是一种方法,但同样-传递一个容器类作为唯一的参数并从中提取所需的数据会更安全吗?如何定义一个具有相同参数的所有方法的基接口,并将其扩展到“特殊”的特殊接口图表类型?@PavanKumar这需要检查每个参数的
    instanceof
    ,并按预定义顺序为每个字段分配其值。因此,在这种情况下,提供地图是不可取的。为了尽可能地通用,但尽管有编译安全性,您可以使用参数对象,甚至在实例之间使用继承。生成器模式只是创建它们的一种方法()