我了解此处发布的解决方案 Different return types of abstract method in java without casting
但是,我不认为我可以使用泛型,因为一些其他类包含“内容”,我不想在编译时决定它使用哪种类型的内容。
public abstract class Content {
public abstract Content getContent();
}
public class UrlContent : Content {
public String s;
public getContent(){ return s;}
}
public class ImageContent : Content {
public Byte[] image;
public getContent(){ return image;}
}
最佳答案
您可以使用 generics 完成此操作,并且仍然维护一个非通用接口(interface),您可以在任何不需要知道返回类型的地方引用它,例如:
public interface IContent {
object GetContent();
}
public abstract class Content<T> : IContent {
public abstract T GetContent();
object IContent.GetContent()
{
return this.GetContent(); // Calls the generic GetContent method.
}
}
public class UrlContent : Content<String> {
public String s;
public override String GetContent() { return s; }
}
public class ImageContent : Content<Byte[]> {
public Byte[] image;
public override Byte[] GetContent(){ return image; }
}
关于具有返回不同类型的子项的抽象类中的 C# 抽象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22137624/