Wywoływanie metody dla listy obiektów typu generycznego

0

Posiadam dwie klasy: Movie i Series. Obie klasy posiadają metody getID() i getOriginalTitle(). Chciałbym mieć jedną metodę z typem generycznym, która przyjmowałaby listę obiektów tych klas. Napisałem podobną metodę, z tym, że nie można w taki sposób używać metod tych klas. Da rady jakoś to zrobić, nie tworząc dwóch różnych metod?

if(selectedIndex == 0) {
					deserializationMovie();
					List<Movie> listNewlyAddedMovies = listMovies;
					
					showNewlyAdded(listNewlyAddedMovies, listMovies, panelNewlyAdded, listNewlyAddedMovies.size());
				} else if(selectedIndex == 1) {
					deserializationSeries();
					List<Series> listNewlyAddedSeries = listSeries;
					
					showNewlyAdded(listNewlyAddedSeries, listSeries, panelNewlyAdded, listNewlyAddedSeries.size());
				}
				
				panelNewlyAdded.repaint();
				
			}
		
		});

		deserializationMovie();
		List<Movie> listNewlyAddedMovies = listMovies;
		showNewlyAdded(listNewlyAddedMovies, listMovies, panelNewlyAdded, listNewlyAddedMovies.size());
	}
	
	public <T>void showNewlyAdded(List<T> list, List<T> listSerialized, JPanel panelRankingSeries, int numberOfElements) {
		
		JLabel label;
		JButton button;
		
		int y = 40, y2 = 0, yTitle = 35, y2Title = 0;
		
		int max = 0;
		if(numberOfElements > 6)
			max = 7;
		else
			max = numberOfElements+1;
		
		int index = 0;
		for(int i = 1; i < max; ++i) {
			
			for(int i1 = 0; i1 < numberOfElements; ++i1) {
				if(listSerialized.get(i1).getID() == list.get(list.size()-i).getID()) {
					index = i1;
				}
			}
			final int iindex = index;
			
			label = new JLabel(Integer.toString(i));
			label.setFont(new Font("SansSerif", Font.BOLD, 15));
			if(i == 0)
				label.setBounds(25, y, 20, 20);
			else
				label.setBounds(25, y+y2, 20, 20);
			panelRankingSeries.add(label);
			
			button = new JButton(list.get(list.size()-i).getOriginalTitle());
			button.setContentAreaFilled(false);
			button.setFont(new Font("SansSerif", Font.BOLD, 15));
			if(i == 0)
				button.setBounds(50, yTitle, 150, 30);
			else
				button.setBounds(50, yTitle+y2Title, 150, 30);
			button.addActionListener(new ActionListener() {

				@Override
				public void actionPerformed(ActionEvent arg0) {
					showSeries(iindex);
					
				}
				
			});
			panelRankingSeries.add(button);
			
			y2+=40;
			y2Title+=40;
		}
		
		
	}
0

Można (o ile dobrze rozumiem o co Ci chodzi...).
Do poczytania:
O dziedziczeniu tu: http://docs.oracle.com/javase/tutorial/java/IandI/index.html
O generykach tu: http://docs.oracle.com/javase/tutorial/java/generics/index.html

Przykładowe rozwiązanie:
Na początek utwórz sobie interface lub klasę abstrakcyjną o nazwie np Watchable z metodami: getID() i getOriginalTitle(). Następnie zmień definicję twoich dwóch klas Movie i Series na odpowiednio:
public class Movie implements Watchable i public class Movie implements Watchable (lub jeśli zdecydujesz się na klasę abstrakcyjną public class Movie extends Watchable i public class Series extends Watchable).

Nagłówek metody showNewlyAdded zmień na:
public void showNewlyAdded(List<Watchable> list, List<Watchable> listSerialized, JPanel panelRankingSeries, int numberOfElements).
W ten sposób elementy wyciągane z listy będą miały metody których potrzebujesz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1