【问题标题】:How to use set() method for T typeT 类型如何使用 set() 方法
【发布时间】:2021-10-07 08:47:19
【问题描述】:

我使用 XML 文档。我的程序中有很多类似的标签和方法。它们都做同样的事情,但它们返回的所有东西都作为参数具有不同的对象。在这个方法中,我检查了两个字符串。因此,可以使用 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 generics get set


    【解决方案1】:

    您可以使用 Java Upper Bound Generics 例如,您可以编写一个超类,在其中放置继承或抽象的 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 阅读此答案:

    Understanding bounded generics in java. What is the point?

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-17
      • 1970-01-01
      • 1970-01-01
      • 2014-09-28
      • 2016-06-23
      • 1970-01-01
      • 2013-10-26
      相关资源
      最近更新 更多