2011-01-15 15 views
6

gelen doğru türü Dönüş: Ben her türlü spor etkinlikleri (modellemek çalışıyorumJava Ben aşağıdaki sınıf yapısına sahip Jenerik yöntemle

public class Team { 
    ... 
} 

public class Event { 

} 

public abstract class Fixture<T extends Team> implements Event { 
    ... 
} 

public abstract class Forecast<Event> { 

} 

public class MyPrediction<T extends Fixture<? extends Team>> extends Forecast<Fixture<? extends Team>>{ 

} 

yani 'Armatür' iki katılımcı oynamak arasında belirli bir oyun için olan Birbirlerine karşı, diğer bir “Etkinlik” türünde ise belirli bir “Olay” ın sonucuna yönelik tahminlerin yanı sıra birçok katılımcı da olabilir. Ben genel bir yöntemi vardır:

public <T> MyPrediction<Fixture<? extends Team>> getMyPrediction(Fixture<? extends Team> fixture) { 

}

Ben fixture tartışmanın genel bir tür olan bir MyPrediction örneğini dönmek isterler, ancak bunu yapmak için görünmüyor olabilir.

SoccerFixture<EnglishSoccerTeams> soccerMatch = new ScoccerFixture<EnglishSoccerTeams>(); 
MyPrediction<SoccerFixture<EnglishSoccerTeams>> = getMyPrediction(soccerMatch); 

Bu özelliği dahil etmek benim sınıf yapısını değiştirmek razıyım: Ben aşağıdaki gibi bir şey Örneğin, o zaman bir derleme hatası alıyorum. Bunu nasıl yapabilirim?

+1

"Aşağıdaki gibi bir şey yaparsam" ... o zaman (hangi sorunla karşılaşırsınız)? –

+0

Olayın bir arayüz olması gerekiyor gibi görünüyor –

cevap

1

değiştirin getMyPrediction imzasını

public <T extends Fixture<? extends Team>> MyPrediction<T> getMyPrediction(T fixture) 

Bu derleyici söyler argümanı a'da fikstürü türleri Sonuç aynıdır, tip kontrolünün geçmesine izin verir.

İşte tam bir örnek, derlemek için bazı diğer küçük değişikliklerle birlikte. Bu örnek kullanımını göstermek için getMyPrediction yöntem ve bir doit yöntemi tutmak için sınıf Predictor tanıtır:

public interface Team { 
} 

public interface Event { 
} 

public abstract class Fixture<T extends Team> implements Event { 
} 

public abstract class Forecast<T> { 
} 

public class MyPrediction<T extends Fixture<? extends Team>> extends 
     Forecast<Fixture<? extends Team>> { 
} 

public class SoccerFixture<T extends SoccerTeam> extends Fixture<T> { 
} 

public class SoccerTeam implements Team { 
} 

public class EnglishSoccerTeam extends SoccerTeam { 
} 

public class Predictor { 

    public <T extends Fixture<? extends Team>> MyPrediction<T> getMyPrediction(T fixture) { 
     return new MyPrediction<T>(); 
    } 

    public void doit() { 
     SoccerFixture<EnglishSoccerTeam> soccerMatch = new SoccerFixture<EnglishSoccerTeam>(); 
     MyPrediction<SoccerFixture<EnglishSoccerTeam>> myPrediction = getMyPrediction(soccerMatch); 
    } 
} 

başka yerde belirtildiği gibi, MyPrediction uygulanmasında anlamlı çalışmayı gerçekleştirmek için bir veya birden fazla fabrika nesneleri tanıtmak gerekebilir.

0

Java'nın tür sistemi nedeniyle tip silme (jenerik parametreler çalışma zamanında kullanılamaz.

zamanki çözüm hangi yapabilirsiniz, ayrı EventFactory sınıf oluşturmak için değildir, önerim doğrudan yapacak kadar güçlü değildir ardından belirli bir Etkinlik alt tipi örneğini oluşturmak için gereken her türlü yönteme geçmek.

İlgili konular