如何使用 T 类型的 set() 方法

How to use set() method for T type

我和 XML 医生一起工作。我的程序中有很多类似的标签和方法。他们都做同样的事情,但他们都 return 并且有不同的对象作为参数。在这个方法中,我检查了两个字符串。所以,可以用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() 方法。我可以使用类似的东西吗?

您可以使用 Java 上界泛型 例如,您可以编写一个超级 class 来放置继承或抽象的 get 和 set 方法:

  private <T extends ApplicationController> T checkBusinessEntityTypeCode(String checkDtKdt, T kdtCode, T dtCode){.... }

ApplicationController 是我们的 Superclass(可以是接口),所有“T”classes 都继承自它,因此来自任何 T 的所有引用都可以调用 get 和 set 方法。

请注意,在使用泛型之前,您需要阅读更多关于上限和下限泛型的信息,将边界与集合一起使用可以使集合不可变,还有许多其他技巧...

Link 到 Oracle 文档 : https://docs.oracle.com/javase/tutorial/java/generics/bounded.html

你可以从 Whosebug 阅读这个答案:

  ---------------------------------------------------

你的代码在我的 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