2017-04-13 137 views
0

我有一个抽象类:传递抽象/通用对象方法

public abstract class AdvancedModel<T, K> 

具有两个subclasss:

public class TrackModel extends AdvancedModel<Track, Toptracks> 

public class ArtistModel extends AdvancedModel<Artist, Topartists> 

在称为评价一个单独的类,我想有一个方法可以接受这些对象中的任何一个,并且可以使用它。有没有办法做到这一点使用泛型类型,或者我必须有两次使用两个不同的类作为参数相同的方法?

编辑

我试图

private <T, K> float runModel(AdvancedModel<T, K> testEngine) 

这似乎当我宣布物体像前面的工作:与后来的其他方法

AdvancedModel<Track, Toptracks> name = new TrackModel(10, 17); 

float result = runModel(name); 

但是,这是造成问题。例如,我有另一种方法,我想要从K调用getArtist()或getTrack(),具体取决于K是Toptracks还是Topartists?

+0

“我想有一个发生在这两种对象的方法和做的东西与它” - 是的,你可以,但除非你指定你想做什么样的“东西” - 我们无法真正帮助你... – alfasin

+0

你可以使用基类 –

+0

这取决于你的方法在做什么。如果它能够在不知道“T”或“K”的情况下在基类上操作,它可以接受“AdvancedModel ”。 – shmosel

回答

3

你应该给你的方法声明中加入类型参数如下:

public <T, K> void doStuffWithAdvancedModel(AdvancedModel<T, K> model) { 
    // do stuff here 
} 
+0

我试图 私人浮子runModel(AdvancedModel testEngine) 这似乎当我声明的对象工作较早,如: AdvancedModel <轨道,Toptracks>名=新TrackModel(10,17); float result = runModel(name); 但是,这会导致其他方法稍后出现问题。例如,我有另一种方法,我想要从K调用getArtist()或getTrack(),具体取决于K是Toptracks还是Topartists? –

+0

泛型(如从名称开始)用于_generalization_。如果你需要处理一些特定的类型,比如'Toptracks'或'Topartists'并且调用它们的具体方法,你应该创建具有'Toptack'或者'Topartist'作为参数的独立方法。 –