在这种情况下如何避免重复代码?

naw*_*ara 9 java oop inheritance interface

我的项目是关于在java中实现hyperGraph

我的hyperGraph包含各种类型的hyperEdge,具体取决于我所拥有的顶点类型

顶点类型:图像,标签......

HyperEdge =同质(关联相同类型的顶点)/异构(关联不同类型的顶点)

同构HyperEdge =图像图像HyperEdge/Tag-tag hyperEdge

这是一个快速绘制的UML图

在此输入图像描述

在此输入图像描述 这是我的代码

public interface HomogenousHyperedge< T extends Vertex<L>, L> extends Hyperedge {

   public abstract List<T> searchNearstNeighborsVertex(
      Hypergraph hypergraph, T vertex);
}
Run Code Online (Sandbox Code Playgroud)


public class ImageImageHyperedge implements
   HomogenousHyperedge<ImageVertex, Map<String,Instance>> {

   @Override
   public List<ImageVertex> searchNearstNeighborsVertex(Hypergraph hypergraph,
        ImageVertex vertex) {
      return null;
   }
}
Run Code Online (Sandbox Code Playgroud)

问题出在ImageImageHyperEdge类中我应该知道基于它的特征是什么类型我将搜索ImageVertex最近邻居我不能将它传递给超级接口的抽象方法因为TagTagHyperEdge类不需要它

如果我用{featureOneHyperEdge类,... featureFiveHyperEdge类}替换ImageImageHyperEdge类(我知道它的特征类型)它将是一个重复的代码,因为它是相同的最近邻搜索算法


feature =图像的低级特征(例如颜色直方图)
我有5种低级特征
我将使用每种特征来搜索当前图像的最近邻居
所有特征都存储在一个简单的文本文件中
,使用相同的算法为了搜索最近的邻居
,每次只更改文件

Zac*_*ber 0

根据您所写的有关“功能”的内容,我想说这适合作为 ImageImageHyperEdge 类中的字段。您可以使用定义它的任何各种成员来创建一个FeatureType类。

public class ImageImageHyperedge implements
   HomogenousHyperedge<ImageVertex, Map<String,Instance>> {

   private FeatureType featureType;

   @Override
   public List<ImageVertex> searchNearstNeighborsVertex(Hypergraph hypergraph,
        ImageVertex vertex) {
      return null;
   }
}
Run Code Online (Sandbox Code Playgroud)