Java 如何在不同的类类型ArrayList中使用相同的方法?
我正在做一个项目,它应该存储在两个不同的文本文件中。假设我有两个类Person和Activity,每个类只有以下共同属性:id和isActive。但也有许多是不常见的 我还有两个类ArrayList类型:Java 如何在不同的类类型ArrayList中使用相同的方法?,java,class,arraylist,refactoring,Java,Class,Arraylist,Refactoring,我正在做一个项目,它应该存储在两个不同的文本文件中。假设我有两个类Person和Activity,每个类只有以下共同属性:id和isActive。但也有许多是不常见的 我还有两个类ArrayList类型: public class RegistryPerson extends ArrayList<Person> { public void add(Person obj){ .... } public boolean isDup
public class RegistryPerson extends ArrayList<Person> {
public void add(Person obj){
....
}
public boolean isDuplicate(Person obj){
for(Person p: this){
if(obj.equals(p)){
return true;
}
}
return false;
}
public Person search(int id){
....
}
public void readFile(){
otherClass.readFile(String txtfilePerson);
}
public void activate(Person obj){
obj.setActivate;
}
//more methods
}
公共类RegistryPerson扩展了ArrayList{
公共无效添加(人员对象){
....
}
公共布尔值重复(个人对象){
对于(人员p:本){
如果(obj.等于(p)){
返回true;
}
}
返回false;
}
公众人物搜索(int id){
....
}
公共void readFile(){
readFile(字符串txtfilePerson);
}
公共无效激活(人员obj){
obj.setActivate;
}
//更多方法
}
公共类注册表活动扩展了ArrayList{
公共作废添加(活动obj){
....
}
公共布尔值重复(活动对象){
对于(活动p:本){
如果(obj.等于(p)){
返回true;
}
}
返回false;
}
公共活动搜索(int id){
....
}
公共void readFile(){
readFile(字符串txtfileActivity);
}
公共作废激活(活动obj){
obj.setActivate;
}
//更多方法
}
两个类都有相同的方法
正如您所看到的,类型为ArrayList RegityPerson和RegistryActivity的两个类都有相同的方法,但有些类使用了不同类型的对象
我只是不想在不同的类中有几乎相同的代码。我可以使用接口或抽象类吗?最重要的是,如何实现这一点?。还是我把一切都复杂化了
谢谢。您可以在这里遵循设计原则
创建一个界面
比如说实体
,由人员
和活动
Entity.java
public interface Entity {
public Boolean equals(Entity e);
//other common methods
}
public class Person implements Entity {
...
@Override
public boolean equals(Entity e) {
...
}
...
}
public class Activity implements Entity {
...
@Override
public boolean equals(Entity e) {
...
}
...
}
public class Registry extends ArrayList<Entity> {
public void add(Entity obj){
....
}
public boolean isDuplicate(Entity obj){
for(Entity p: this){
if(obj.equals(p)){
return true;
}
}
return false;
}
public Entity search(int id){
....
}
public void readFile(){
otherClass.readFile(String txtfilePerson);
}
public void activate(Entity obj){
obj.setActivate;
}
//more methods
}
public class RegistryPerson extends Registry {
..
}
public class RegistryActivity extends Registry {
..
}
此接口将由人员
和活动
Person.java
public interface Entity {
public Boolean equals(Entity e);
//other common methods
}
public class Person implements Entity {
...
@Override
public boolean equals(Entity e) {
...
}
...
}
public class Activity implements Entity {
...
@Override
public boolean equals(Entity e) {
...
}
...
}
public class Registry extends ArrayList<Entity> {
public void add(Entity obj){
....
}
public boolean isDuplicate(Entity obj){
for(Entity p: this){
if(obj.equals(p)){
return true;
}
}
return false;
}
public Entity search(int id){
....
}
public void readFile(){
otherClass.readFile(String txtfilePerson);
}
public void activate(Entity obj){
obj.setActivate;
}
//more methods
}
public class RegistryPerson extends Registry {
..
}
public class RegistryActivity extends Registry {
..
}
Activity.java
public interface Entity {
public Boolean equals(Entity e);
//other common methods
}
public class Person implements Entity {
...
@Override
public boolean equals(Entity e) {
...
}
...
}
public class Activity implements Entity {
...
@Override
public boolean equals(Entity e) {
...
}
...
}
public class Registry extends ArrayList<Entity> {
public void add(Entity obj){
....
}
public boolean isDuplicate(Entity obj){
for(Entity p: this){
if(obj.equals(p)){
return true;
}
}
return false;
}
public Entity search(int id){
....
}
public void readFile(){
otherClass.readFile(String txtfilePerson);
}
public void activate(Entity obj){
obj.setActivate;
}
//more methods
}
public class RegistryPerson extends Registry {
..
}
public class RegistryActivity extends Registry {
..
}
现在创建一个父类注册表
Registry.java
public interface Entity {
public Boolean equals(Entity e);
//other common methods
}
public class Person implements Entity {
...
@Override
public boolean equals(Entity e) {
...
}
...
}
public class Activity implements Entity {
...
@Override
public boolean equals(Entity e) {
...
}
...
}
public class Registry extends ArrayList<Entity> {
public void add(Entity obj){
....
}
public boolean isDuplicate(Entity obj){
for(Entity p: this){
if(obj.equals(p)){
return true;
}
}
return false;
}
public Entity search(int id){
....
}
public void readFile(){
otherClass.readFile(String txtfilePerson);
}
public void activate(Entity obj){
obj.setActivate;
}
//more methods
}
public class RegistryPerson extends Registry {
..
}
public class RegistryActivity extends Registry {
..
}
RegistryActivity.java
public interface Entity {
public Boolean equals(Entity e);
//other common methods
}
public class Person implements Entity {
...
@Override
public boolean equals(Entity e) {
...
}
...
}
public class Activity implements Entity {
...
@Override
public boolean equals(Entity e) {
...
}
...
}
public class Registry extends ArrayList<Entity> {
public void add(Entity obj){
....
}
public boolean isDuplicate(Entity obj){
for(Entity p: this){
if(obj.equals(p)){
return true;
}
}
return false;
}
public Entity search(int id){
....
}
public void readFile(){
otherClass.readFile(String txtfilePerson);
}
public void activate(Entity obj){
obj.setActivate;
}
//more methods
}
public class RegistryPerson extends Registry {
..
}
public class RegistryActivity extends Registry {
..
}
注:上面列出的所有类中,许多都包含更常见的方法。这只是给你这个设计原则的基本介绍。我的想法与rD相同,但使用泛型创建注册表。我还把名单移到了班里。从文件读取和添加注册表的方法可以由其他类处理。我不惜一切代价避免继承和抽象类。接口是泛型的,它非常强大
interface IdObject {
int getId();
}
class Registry<T extends IdObject> {
private List<T> list = new ArrayList<T>();
public void add(T obj){
list.add(obj);
}
public boolean isDuplicate(T obj){
for(T t: list){
if(obj.equals(t)){
return true;
}
}
return false;
}
public T search(int id){
for(T t: list){
if(t.getId() == id)){
return t;
}
}
return null;
}
}
class Example {
Registery<Person> personRegistery = new Registry<>();
Registery<Activity> activityRegistery = new Registry<>();
}
接口IdObject{
int getId();
}
类注册表{
私有列表=新的ArrayList();
公共无效添加(T obj){
列表。添加(obj);
}
公共布尔isDuplicate(T obj){
对于(T:列表){
如果(对象等于(t)){
返回true;
}
}
返回false;
}
公共T搜索(int id){
对于(T:列表){
if(t.getId()==id)){
返回t;
}
}
返回null;
}
}
课例{
Registry personRegistry=新注册表();
Registry ActivityRegistry=新注册表();
}
plus 1,用于优先组合而不是继承,并且不使注册表成为arraylist的子类!同意@GhostCat-组合而非继承是OP出错的地方。强烈建议不要扩展ArrayList。只要有一个列表作为类的实例变量。@puhlen谢谢。。你能提供更多的信息吗?谢谢@rD。这正是我想要的,当然你可以改进很多东西,但要一步一步来。