Java泛型方法如何返回泛型内部类

时间:2016-10-17 08:19:23

标签: java generics

我知道标题很乱,但我不知道如何解释这个问题。

让:

public class A<T> {
    T foo;
    public A(T foo) {
        this.foo = foo;
    }

}

public class B {
    public A<T> getA() {
         ...
    }
}

现在,很明显B方法甚至无法编译。关键是我需要一个返回A类的B类的方法,其中类T必须以某种方式传递给该方法,所以我可以在这种方法中创建一个T实例,以便返回一个A的实例。

我尝试过类似的事情:

public A getA(Class aClass) {
    return new A<aClass> ...
}

但那根本不会编译(aClass是未知的,它会抱怨,显然它是对的......)

那么,我怎样才能将T类传递给该方法以便在其中创建A的实例?

我希望你理解我的问题。

提前多多感谢,

3 个答案:

答案 0 :(得分:1)

您可能想要编写通用方法:

https://docs.oracle.com/javase/tutorial/extra/generics/methods.html

public class B {
   public <T> A<T> getA() {
     ...
}

答案 1 :(得分:0)

您的函数需要一个类型参数。请记住,您还需要A构造函数的参数。这是语法:

public <T> A<T> getA(T t) {
    return new A<>(t);
}

答案 2 :(得分:0)

您的非通用实现具有修复的蓝图:更改此

if ([keyPath isEqualToString:@"loadedTimeRanges"]) {

    NSArray *timeRanges = (NSArray *)[change objectForKey:NSKeyValueChangeNewKey];
    if (timeRanges && [timeRanges count]) {
        CMTimeRange timerange = [[timeRanges objectAtIndex:0] CMTimeRangeValue];

        if (self.audioPlayer.rate == 0 && !pauseReasonForced) {
            CMTime bufferdTime = CMTimeAdd(timerange.start, timerange.duration);
            CMTime milestone = CMTimeAdd(self.audioPlayer.currentTime, CMTimeMakeWithSeconds(5.0f, timerange.duration.timescale));

            if (CMTIME_COMPARE_INLINE(bufferdTime , >, milestone) && self.audioPlayer.currentItem.status == AVPlayerItemStatusReadyToPlay && !interruptedWhilePlaying && !routeChangedWhilePlaying) {
                if (![self isPlaying]) {

                    [self.audioPlayer play];
                }
            }
        }
    }
}

到此:

public A getA(Class aClass) {
    return new A<aClass> ...
}