在method参数中使用override的类实例

时间:2017-03-02 08:04:25

标签: java class anonymous-inner-class

任何人都可以帮我理解java的代码块

static void UpdateHCMWorkerField(Args _args)
{
    #File
    CommaTextIo         inFile;
    Container           con;
    int                 i;
    FileIOPermission    permission;
    FilePath            readFile;

    SalesQuotationTable           salesQuotationTable;
    SalesQuotationId       quotationId;
    str                    worker;


    HcmWorker                     hcmWorker;
    ;
    readFile = "File.csv";

    permission = new FileIOPermission(readFile, #io_read);
    permission.assert();

    inFile = new CommaTextIo(readFile, #io_read);
    inFile.inFieldDelimiter(",");

    while (inFile.status() == IO_Status::Ok)
    {
        con = inFile.read();

        quotationId = conPeek(con,1);
        worker = conPeek(con,2);

        salesQuotationTable = salesQuotationTable::find(quotationId,true);

        if(salesQuotationTable && worker) {
            ttsBegin;


// Obviously, this is not working working because I am trying to update the RecId field with a string value.

      salesQuotationTable.WorkerField = worker;
        salesQuotationTable.update();

            ttscommit;
        }
        info("Done!");
        }
    }

这只是一个例子我需要在方法参数内部使用覆盖方法来理解新实例的概念。

我理解这段代码的作用,但我需要理解概念*

4 个答案:

答案 0 :(得分:0)

查看File.list(FilenameFilter filter)的{​​{3}}。

它需要documentation作为参数,而后者又有方法

boolean accept(File dir, String name)

您希望将新的FilenameFilter传递给该方法,然后通过将其作为FilenameFilter传递并覆盖匿名类中的accept方法来执行此操作。

答案 1 :(得分:0)

考虑您有一个接口或抽象类作为参数的方法。如果调用此方法,则必须传递指定类型的具体实例。那么,一种可能性是在参数内创建实例。这称为匿名类

只有在您需要这门课程时才应该这样做。

答案 2 :(得分:0)

如果你在java.io.File中检查list()的实际实现,它看起来像这样。

    public String[] list(FilenameFilter filter) {
    String names[] = list();
    if ((names == null) || (filter == null)) {
        return names;
    }
    List<String> v = new ArrayList<>();
    for (int i = 0 ; i < names.length ; i++) {
        if (filter.accept(this, names[i])) {
            v.add(names[i]);
        }
    }
    return v.toArray(new String[v.size()]);
}

该方法期待任何实现FilenameFilter的实例。它在File.list()方法中的作用是调用filter参数的accept()。它实际上执行调用者的原始实现。这意味着你在这种情况下提供的被覆盖的方法内容。

答案 3 :(得分:-2)

这称为匿名内部类

没有名称的类在java中称为匿名内部类。如果必须覆盖类或接口的方法,则应该使用它。