public abstract class CommonClass {
abstract void send(<what should i put here???>) {}
}
public class ClassA extends CommonClass {
void send(List<Comments> commentsList) {
// do stuff
}
}
public class ClassB extends CommonClass {
void send(List<Post> postList) {
// do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
我是OODP的新手,我正在尝试一种能够接收任何种类的List数据的方法,以便我可以抽象出一些东西。我怎样才能做到这一点?
您可以使它在某种类型上通用T
。喜欢,
public abstract class CommonClass<T> {
abstract void send(List<T> al);
}
Run Code Online (Sandbox Code Playgroud)
然后,要实现它-使用泛型。喜欢,
public class ClassA extends CommonClass<Comments> {
@Override
void send(List<Comments> commentsList) {
// do stuff
}
}
public class ClassB extends CommonClass<Post> {
@Override
void send(List<Post> postList) {
// do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
另外,如评论中所述,您的类名称可以进行改进以更加直观;就像是,
public abstract class AbstractSender<T> {
abstract void send(List<T> al);
}
Run Code Online (Sandbox Code Playgroud)
然后
public class CommentSender extends AbstractSender<Comment> {
@Override
void send(List<Comment> commentsList) {
// do stuff
}
}
public class PostSender extends AbstractSender<Post> {
@Override
void send(List<Post> postList) {
// do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
这样做的优点是可读性更高,并且更容易推理(我可以PostSender
通过读取名称来告诉a 做什么,ClassB
而不是那么多)。
最后,这看起来像一个接口可以工作的情况,因为您abstract class
是纯虚拟的(并且应该首选,因为您可以实现多个接口,但只能从单个父类扩展);
public interface ISender<T> {
void send(List<T> al);
}
public class CommentSender implements ISender<Comment> {
@Override
void send(List<Comment> commentsList) {
// do stuff
}
}
public class PostSender implements ISender<Post> {
@Override
void send(List<Post> postList) {
// do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
100 次 |
最近记录: |