【发布时间】:2020-12-20 10:52:06
【问题描述】:
我认为通过代码解释我的问题更容易。
假设一家销售公司有 2 名销售人员:
public class Employee()
{
private int salary;
}
public class SalesEmployee1 extends Employee()
{
private int commisionRate;
}
public class SalesEmployee2 extends Employee()
{
private int commisionRate;
}
假设我有一个向量:Vector<Employee> v = new Vector<>();
我需要遍历该向量并找到佣金最低的 SalesEmployee1(每个 salesEmployee 计算方式不同,因此佣金不同)。
如果不使用 instanceof,如何询问我是否是 SalesEmployee1?
我想过在父类中添加一个每个孩子都覆盖的函数
public boolean myClass(String name)
{
return name.equals(ClassName for example SalesEmployee1);
}
而不是做这样的事情:
for(Employee e : v)
{
if(e.myClass("SalesEmployee1")
doSmth()...
}
这个方法对吗?任何人都可以提出另一种解决方案,因为我觉得我做错了什么,因为这感觉像是一个变化的例子。 谢谢!
【问题讨论】:
-
您可以通过在未知对象的
Class上调用(取决于您的用例)getName或getSimpleName来获取未知类型对象的类名 - 例如myObject.getClass().getName() -
@TheHeadRush 感觉就像通过不同的方法使用 instanceof,这是解决我问题的正确方法吗?感谢您的快速回复。
-
您有一个错误,即您将薪水存储在 Employee 类和 SalesEmployee1 类中,因此您隐藏了该变量。其次,在这种情况下,您可能应该使用 instanceof。
-
@AlBlue 你是对的,我更改了私有字段以更好地示例。并添加了解释(每个 salesEmployee 计算方式不同,因此佣金不同)。我不能使用 instanceof 这是我的问题。
-
您可以简单地将
Employee转换为SalesEmployee1并捕获并忽略ClassCastException。但是为什么不喜欢使用instanceof呢?