#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
}
}
С помощью приведенного выше кода я создал граф, в котором каждая вершина является длинной, а каждое ребро — целым числом.