数组在java中类名是唯一更改的情况下,我可以使用继承吗?
我有重复的代码,其中代码中唯一的区别是类名及其传入的参数。 有没有办法重用这段代码
public void addToStaffList(Staff staff)
{
if(this.staffList == null)
{
this.staffList = new Staff[]{staff};
return;
}
if(!isThisStaffAlreadyListed(staff))
{
for(int i = 0; i < this.getStaffList().length; i++)
{ // first fill any empty array index
if(this.getStaffList()[i] == null)
{
this.getStaffList()[i] = staff;
return;
}
}
}
if(!isThisStaffAlreadyListed(staff))
{
int length = this.getStaffList().length;
length++;
Staff[] newStaffList = new Staff[length];
for(int i = 0; i < this.getStaffList().length; i++)
{ // add staff to extended array with bigger index
newStaffList[i] = this.getStaffList()[i];
}
newStaffList[newStaffList.length-1] = staff;
this.staffList = newStaffList;
}
}
这和……一样
public void addToRoomsList(Room room)
{
if(this.roomsList == null)
{
this.roomsList = new Room[]{room};
return;
}
if(!isThisRoomAlreadyListed(room))
{
for(int i = 0; i < this.getRoomsList().length; i++)
{ // first fill any empty array index
if(this.getRoomsList()[i] == null)
{
this.getRoomsList()[i] = room;
return;
}
}
}
if(!isThisRoomAlreadyListed(room))
{
int length = this.getRoomsList().length;
length++;
Room[] newRoomsList = new Room[length];
for(int i = 0; i < this.getRoomsList().length; i++)
{ // add room to extended array with bigger index
newRoomsList[i] = this.getRoomsList()[i];
}
newRoomsList[newRoomsList.length-1] = room;
this.roomsList = newRoomsList;
}
}
这些代码块的唯一区别是类名“Staff”和“Room”,还有参数变量“Staff”和“Room”。
即使在这些代码块中,也有更多重复的代码块,如isThisStaffAlreadyListed()
和isThisRoomAlreadyListed()
,它们都有相同的代码块,只是类名发生了变化。
是否有一种方法可以通过某种方式传入类名及其参数来重用此代码
# 1 楼答案
大部分代码在数组中寻找一个开口,如果没有足够的空间,则将数组扩展一个元素
如果您仅限于使用数组,重用代码的一种方法是创建一个扩展数组的通用帮助器方法,如下所示:
您需要导入
java.lang.reflect.Array
才能编译它这几乎就是您的代码,只有三个例外:
T
而不是特定类型,并且使用此方法,您可以像这样重写这两种方法:
如果你可以使用^{,你可以进一步简化:如果你像这样声明你的
staffList
和roomList
您的助手方法如下所示:
这两个电话如下所示:
# 2 楼答案
你要找的东西名为generics。你的代码可能看起来像
或者