假设用户为您提供了一个电话号码(作为PhoneNumber类或其子类的对象),如果它是移动电话或家庭电话,则首先说明。在主程序中,如果它涉及移动电话或家庭电话,您应该能够知道(之后的方式)。
以下是您无法做到的事情:
你应该制作两个不同的类来扩展PhoneNumber类并且具有完全相同的内容(在我的例子中它们实际上是空的,但在我真正的问题中它们不是)?如果你这样做,你可以制作这些类的对象,并在主程序中使用 instanceof ,但我想知道是否还有另一个解决方案,一个看起来更好的解决方案。
编辑:对我来说似乎错误的是具有相同内容的2个类,而不是instanceof,因为我们实际上只知道找出对象的类。
示例:
public class PhoneNumber{
private int Number;
public PhoneNumber(int Number){
this.Number = Number;
}
}
public class Mobile extends PhoneNumber{}
public class HousePhone extends PhoneNumber{}
答案 0 :(得分:1)
您不能在任何变量(在类或主程序中)中指出答案。但是你可以制作一种获取类型的方法。在您的课程@Value('${widget.name:#{NULL}}')
def name
和Mobile
中创建一个方法HousePhone
,返回某种getPhoneType
。 enum
方法应该是基类中的抽象方法。
我认为这比getPhoneType
更好。
答案 1 :(得分:0)
替代instanceof
,您可以使用instanceof
例如
isAssignableFrom
答案 2 :(得分:0)
由于无法在主程序中创建任何变量,因此您的选项显然是有限。
您可以尝试使用OOP概念来解决此问题。并且您不需要复制内容,因为继承自已拥有所有内容的同一父级将自动授予他们对内容的访问权限。这包括除指定为私有的所有属性和字段。要解决此问题,您可以使这些属性受到保护。
以下内容对您有用:
public abstract class PhoneNumber
{
private int Number;
public PhoneNumber(int Number)
{
this.Number = Number;
}
protected int getNumber()
{
return Number;
}
public void doSmthnWithNumber();
}
public class Mobile extends PhoneNumber
{
@Override
public void doSmthnWithNumber()
{
int Number = getNumber();
// Do whatever you want with mobile numbers
}
}
public class HousePhone extends PhoneNumber
{
@Override
public void doSmthnWithNumber()
{
int Number = getNumber();
// Do whatever you want with HousePhone numbers
}
}
因此,您知道代码中没有冗余,您不会重复自己,而是遵循SOLID原则。使眼睛更容易,让其他开发者更好地了解你。 您还可以对PhoneNumber进行更改,它将反映在子类中。
希望我能够解决你的问题。