我要直奔这一点。
我有3节课。人,教授和学生。 (人物,教授,校友)。 教授和学生都来自Person。但是Person也可以实例化,因为它不是抽象的。
我有50个人,在列表中随机生成。可以是任何人,教授或学生。 我想将它们分别分成不同的列表。
此刻,我做到了:
event
专业是教授列表
alumnos是学生列表
nuevasPersonas是人员列表
哪个作品完美。但是有人告诉我不要使用instanceof,所以我不习惯。
关于如何在不使用instanceof的情况下将它们分成列表的任何想法?
谢谢。
答案 0 :(得分:0)
我会使用instanceof,为什么不习惯呢?
无论如何,替代方案可能是在Person(= 0)中使用变量类型(带有getter,但没有setter),然后在Professor and Student中将其覆盖为1和2。 然后,您将测试变量而不是使用instanceof。
答案 1 :(得分:0)
还可以如下使用getClass()。getSimpleName():
public static void main (String[] args) throws java.lang.Exception
{
List<Test1> list = new ArrayList<>(2);
Test1 o1 = new Test1();
list.add(o1);
Test2 o2 = new Test2();
list.add(o2);
for (Test1 test : list) {
System.out.println(test.getClass().getSimpleName());
}
}
static class Test1{
}
static class Test2 extends Test1{
}
在for循环中,您可以使用if条件(如以下代码)来完成工作:
for (Test1 test : list) {
String className = test.getClass().getSimpleName();
if(className.equals("Test1")) {
System.out.println("Test1");
} else if(className.equals("Test2")) {
System.out.println("Test2");
}
System.out.println();
}
根据覆盖方法的另一种解决方案是:
public static void main (String[] args) throws java.lang.Exception
{
List<Test1> list = new ArrayList<>(2);
Test1 o1 = new Test1();
list.add(o1);
Test2 o2 = new Test2();
list.add(o2);
for (Test1 test : list) {
test.addToMyTypeList();
}
for(Test1 test : Test1.list) {
System.out.println(test.getClass().getSimpleName());
}
for(Test1 test : Test1.list) {
System.out.println(test.getClass().getSimpleName());
}
}
static class Test1{
public static List<Test1> list = new ArrayList<>();
public void addToMyTypeList() {
String className = test.getClass().getSimpleName();
if(className.equals("Test1")) {
Test1.list.add(this);
}
}
}
static class Test2 extends Test1{
public static List<Test1> list = new ArrayList<>();
@Override
public void addToMyTypeList() {
String className = test.getClass().getSimpleName();
if(className.equals("Test2")) {
Test2.list.add(this);
}
}
}
答案 2 :(得分:0)
也许您的老师希望您创建一个overriden method来回答问题isStudent
或isProfessor
?
但是,由于没有提供instanceof
运算符无法提供的额外信息,因此这是一个人为设计的示例,其中添加这些冗余方法并不是一个好的设计决定。不幸的是,在初学者课程中,有时会遇到这样的人为设计的例子,这些例子为了教授特定的语言概念而过分简化。
答案 3 :(得分:0)
您可以使用每种对象类型重载“ add”方法-类似于以下代码。
main方法只是将三个不同Object的实例添加到ObjectSplitter类-将它们分离到不同的Collections中
map.values()
}