我使用 XML 檔案。我的程式中有很多類似的標簽和方法。它們都做同樣的事情,但它們都回傳并具有不同的物件作為引數。在這個方法中,我檢查了兩個 String。因此,可以使用 T 代替不同的物件。所有這些物件都沒有連接。例如,我想執行以下操作:
private <T> T checkBusinessEntityTypeCode(CheckDtKdt checkDtKdt, T kdtCode, T dtCode) {
if (kdtCode != null && dtCode != null) {
if (StringUtils.compare(kdtCode..getValue(), dtCode.getValue()) != 0) {
checkFieldsDtKdtService.save14Graph(checkDtKdt, dtCode.getValue(), kdtCode.getValue());
dtCode.setValue(kdtCode.getValue());
}
if (StringUtils.compare(kdtCode.getCodeListId(), dtCode.getCodeListId()) != 0) {
checkFieldsDtKdtService.save14Graph(checkDtKdt, dtCode.getCodeListId(), kdtCode.getCodeListId());
dtCode.setCodeListId(kdtCode.getCodeListId());
}
}
}
當然,這段代碼不起作用。因為 get() 和 set() 方法。我可以使用這樣的東西嗎?
uj5u.com熱心網友回復:
您可以使用Java 上限泛型,例如您可以撰寫一個超類,在其中放置繼承或抽象的 get 和 set 方法:
private <T extends ApplicationController> T checkBusinessEntityTypeCode(String checkDtKdt, T kdtCode, T dtCode){.... }
ApplicationController 是我們的超類(可以是一個介面),所有“T”類都繼承自它,因此來自任何 T 的所有參考都可以呼叫 get 和 set 方法。
請注意,在使用之前,您需要閱讀有關上限和下限泛型的更多資訊,將邊界與集合一起使用可以通過許多其他技巧使集合不可變......
鏈接到 Oracle 檔案:https : //docs.oracle.com/javase/tutorial/java/generics/bounded.html
你可以從 StackOverFlow 閱讀這個答案:
理解java中的有界泛型。重點是什么?
---------------------------------------------------
您的代碼在我的 IDE 中編譯,我可以使用參考 kdtCode(compile time) 呼叫 GvtApplicationController 的方法:
private <T extends GvtApplicationController> T checkBusinessEntityTypeCode(String checkDtKdt, T kdtCode, T dtCode) {
if (kdtCode != null && dtCode != null) {
kdtCode.getCurrentVersionPath();
}
return dtCode;
}
例子 :
abstract class Person{
public abstract String getName();
}
class Student extends Person{
@Override
public String getName() {
return "MyName";
}
}
class GenericsBounder{
public static<T extends Person> String showName(T t){
return t.getName();
}
}
public class Bounder{
public static void main(String[] args) {
String s= GenericsBounder.showName(new Student());
System.out.println(s);
}
}
輸出 :
|MyName
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/311156.html
