我有一個關於如何通過接口實例化時調用對象基礎成員的問題。Java鑄造接口,但使用對象方法
假設我有一個框架下面的接口和具體類我試圖建立:
public interface UsedClass {
public boolean getBool();
}
public class User implements UsedClass {
private String userName;
private String userRole;
public User(String userName, String userRole){
this.userName = userName;
this.userRole = userRole;
}
public boolean getBool() {
// some code
}
public int getUserName() {
return userName;
}
public int getUserRole() {
return userRole;
}
而實現類:
public class Run implements UsedClass {
private String runName;
private int runNumber;
public Run(String runName, int runNumber){
this.runName = runName;
this.runNumber = runNumber;
}
public boolean getBool() {
// some code
}
public String getRunName() {
return runName;
}
public int getRunNumber() {
return runNumber;
}
}
但我不能把方法getRunName()
或getUserRole()
成界面!
最終目標是創建一個FactoryClass來處理從數據庫GUI傳遞的對象。
我想知道是否有更好的方法,然後使用類的引用可以安全地調用運行的方法或用戶,如:
public class EntityFactory {
public static Object getValueAt(int rowIndex, int columnIndex, UsedClass usedClass) {
if (usedClass.getClass().getSimpleName().equals("User")) {
switch (columnIndex) {
case 0:
return ((User) usedClass).getUserName();
case 1:
return ((User) usedClass).getUserRole();
default:
return null;
}
} else if (usedClass.getClass().getSimpleName().equals("Run")) {
switch (columnIndex) {
case 0:
return ((Run) usedClass).getRunName();
case 1:
return ((Run) usedClass).getRunNumber();
default:
return null;
}
}
我已看過一些SO帖子 type casting when objects are of interface references in Java和Java cast interface to class
暗示不建議使用引用轉換,但由於我無法將所有方法都放入界面中,會有什麼建議?
至少使用'usedClass instanceof User'而不是'usedClass.getClass()。getSimpleName()。equals(「User」)''。 – Jesper
也許你可以在接口中添加一些'getValueAt(int columnIndex)'方法並在子類中實現它? – Berger
Jesper:謝謝。 Berger:但是更多的OOP在一個類中擁有這個getValueAt。至少這是我的想法。 – mkunkel