我知道标题很乱,但我不知道如何解释这个问题。
让:
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的实例?
我希望你理解我的问题。
提前多多感谢,
答案 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> ...
}