Как написать метод с классом в качестве параметра

#java #parameters

#java #параметры

Вопрос:

Я пишу обязательное назначение для своего класса Java, у нас есть подготовленный метод, который должен быть закодирован для создания MST графа. В подготовленном методе в качестве параметра используется другой класс, и мне интересно, как я могу реализовать этот параметр в своем коде.

подготовленный код:

     public <T, E extends Comparable<E>> ArrayList<Edge<T>> mst(WeightedGraph<T, E> g) {

    }
  

WeightedGraph: другой класс в обязательном файле

T: тип вершин

E: тип ребер

Теперь допустим, я хотел написать:

 if(T > 10)
     do something
  

Как мне это сделать, как я могу ссылаться на T или E или другие методы из «WeightedGraph»?

Комментарии:

1. Изучив класс WeightedGraph или, по крайней мере, его документацию, чтобы узнать, какие общедоступные методы у него есть.

Ответ №1:

То, что вы делаете (или ваш учитель хочет, чтобы вы сделали), — это написание универсального метода, который определяет MST данного графика. Данный граф является экземпляром универсального класса с именем WeightedGraph<T,E> . Поскольку вы не предоставили подробностей о классе WeightedGraph<E,T>, я предполагаю, что этот класс представляет собой своего рода набор вершин типа T и ребер типа E и некоторые методы для обработки графика. Теперь, отвечая на ваш вопрос: как бы вы это сделали:

 if(T > 10)
    do something;
  

Нет, вы не можете этого сделать. T — это тип, а не переменная или значение для сравнения. Что вы можете сделать здесь:

 if(g.getVertexCount() > 10 )
    do something;
  

На вопрос «как я могу ссылаться на T или E или другие методы из «WeightedGraph»?»,
Я не уверен, правильно ли я понимаю этот вопрос, но вы можете вызывать методы из экземпляра g класса WeightedGraph . Ниже приведен пример:

 import java.util.ArrayList;

public class Graph {
public <T, E extends Comparable<E>> ArrayList<Edge<T>> mst(WeightedGraph<T, E> g) {
    if(g.getVertexCount() > 10) {
        // do something
    }
    return null;
}
}
  

Теперь вы можете использовать следующий код:

 import java.util.List;

public class Application {
    public static void main(String[] args) {
        Graph graph = new Graph();
        WeightedGraph<Long, Integer> wg = new WeightedGraph<>();
        List<Edge<Long>> result = graph.mst(wg);
        // do something with the result
    }
}
  

С помощью приведенного выше кода я создал граф, в котором каждая вершина является длинной, а каждое ребро — целым числом.