比 Java 中的 If(x instanceof y) 更好的方法?
Better way then If(x instanceof y) in Java?
我有这些代码行:
public String getAccountType(BankAccount a){
if(a instanceof RegularAccount)
return "RA";
else if(a instanceof SavingsAccount)
return "SA";
else if(a instanceof cityAccount)
return "CLA";
else if(a instanceof StateLawAccount)
return "SLA";
else if(a instanceof FederationLawAccount)
return "FLA";
else
return null;
}
BankAccount
是下面所有 class 的超 class(抽象)。在这种方法中,我只想 return 字符串中的 "a" class 是什么。
但是,我想知道除了这一堆if/else
语句之外,是否还有更好的方法来验证"a" class。有吗?我可以用 switch 语句来做吗?如果可以,怎么做?
将抽象方法 getAccountType()
放在 BankAccount
上,然后实现 return 帐户类型字符串。这是一个假设 BankAccount
是接口的示例:
public interface BankAccount {
String getAccountType();
... whatever else ...
}
然后
public class RegularAccount implements BankAccount {
@Override
public String getAccountType() { return "RA"; }
... whatever else ...
}
如果BankAccount
是一个class那么就把它变成一个抽象方法。
在抽象class中放入一个字符串class成员并覆盖它的getter实现中的方法到return具体类型:
public abstract class BankAccount{
String accountType;
public abstract String getAccountType(){
return accountType;
}
}
在你的情况下,我会向 BackAccount
class 添加一个抽象方法 getAccountType ()
,并在每个具体 class 中实现它,以便它们 return 正确的帐户类型。
public abstract class BankAccount {
public abstract String getAccountType ();
// Rest of implementation
}
public class RegularAccount extends BankAccount {
private static final String ACCOUNT_TYPE = "RA";
@Override
public String getACcountType () {
return ACCOUNT_TYPE;
}
// Rest of implementation
}
比较对象的 class 没有比您随问题提供的代码示例更简单的方法了。但是,如果您最终不得不在代码中执行此操作,那么您应该检查当前的设计。
考虑这样一种情况,您的经理要求您添加两个额外的备用帐户类型(AccountX
和 AccountY
),并要求您删除 StateLawAccount
(出于某些原因) .您不仅需要在代码中为帐户类型 AccountX
和 AccountY
添加新的 classes 并删除现有的 StateLawAccount
,而且您还必须记住这unrelated class 有一个巨大的 if/else
检查银行账户类型。如果你忘了它,那么你已经在你的软件中插入了一个新的错误。
我有这些代码行:
public String getAccountType(BankAccount a){
if(a instanceof RegularAccount)
return "RA";
else if(a instanceof SavingsAccount)
return "SA";
else if(a instanceof cityAccount)
return "CLA";
else if(a instanceof StateLawAccount)
return "SLA";
else if(a instanceof FederationLawAccount)
return "FLA";
else
return null;
}
BankAccount
是下面所有 class 的超 class(抽象)。在这种方法中,我只想 return 字符串中的 "a" class 是什么。
但是,我想知道除了这一堆if/else
语句之外,是否还有更好的方法来验证"a" class。有吗?我可以用 switch 语句来做吗?如果可以,怎么做?
将抽象方法 getAccountType()
放在 BankAccount
上,然后实现 return 帐户类型字符串。这是一个假设 BankAccount
是接口的示例:
public interface BankAccount {
String getAccountType();
... whatever else ...
}
然后
public class RegularAccount implements BankAccount {
@Override
public String getAccountType() { return "RA"; }
... whatever else ...
}
如果BankAccount
是一个class那么就把它变成一个抽象方法。
在抽象class中放入一个字符串class成员并覆盖它的getter实现中的方法到return具体类型:
public abstract class BankAccount{
String accountType;
public abstract String getAccountType(){
return accountType;
}
}
在你的情况下,我会向 BackAccount
class 添加一个抽象方法 getAccountType ()
,并在每个具体 class 中实现它,以便它们 return 正确的帐户类型。
public abstract class BankAccount {
public abstract String getAccountType ();
// Rest of implementation
}
public class RegularAccount extends BankAccount {
private static final String ACCOUNT_TYPE = "RA";
@Override
public String getACcountType () {
return ACCOUNT_TYPE;
}
// Rest of implementation
}
比较对象的 class 没有比您随问题提供的代码示例更简单的方法了。但是,如果您最终不得不在代码中执行此操作,那么您应该检查当前的设计。
考虑这样一种情况,您的经理要求您添加两个额外的备用帐户类型(AccountX
和 AccountY
),并要求您删除 StateLawAccount
(出于某些原因) .您不仅需要在代码中为帐户类型 AccountX
和 AccountY
添加新的 classes 并删除现有的 StateLawAccount
,而且您还必须记住这unrelated class 有一个巨大的 if/else
检查银行账户类型。如果你忘了它,那么你已经在你的软件中插入了一个新的错误。