簡體   English   中英

如何在 Java/Groovy 中調用父方法

[英]How to call parent methods in Java/Groovy

我是 Java 和 groovy 的新手,我主要在 Python 中編寫代碼。我試圖理解為什么代碼不起作用。 我得到的錯誤是groovy.lang.MissingMethodException: No signature of method: static HelloWorld.TestingProduct() is applicable for argument types: () values: []

我的任務是將 eventdate 添加為項目的 sysdate,我只是想了解如何通過本地測試來添加它

import groovy.transform.ToString
import java.time.OffsetDateTime
import java.time.format.DateTimeFormatter



public class HelloWorld{

     public static void main(String[] args){
        String testin = TestingProduct().Inventory()
        System.out.println(testin);
     }
}


class Parent {

   private String setDateNow() {
        OffsetDateTime now = OffsetDateTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE_TIME;
        return formatter.format(now);
    }
}

class TestingProduct extends Parent {
   private static ProductInventoryEvent Inventory(){
      def invent = new ProductInventoryEvent(
         productId:'1',
         productIdType:'2',
         eventType:'3',
         eventDate: setDateNow(),
      )
      return invent
   }
}


@Canonical()
@ToString(includeNames = true)
class ProductInventoryEvent {
    String productId
    String productIdType
    String eventType
    String eventDate

}

您的代碼中幾乎沒有錯誤。 讓我首先從HelloWorld class 開始。

您正在嘗試以錯誤的方式訪問/調用 static 方法Inventory of the TestingProduct 為了訪問 static 方法,您不需要 class 的任何 object 實例。因此,您應該使用TestingProduct.Inventory() TestingProduct().Inventory() ) 。

第二件事是,您的方法Inventory()返回ProductInventoryEvent而不是字符串。 所以你應該改變你想要初始化的變量的類型。 下面是代碼的樣子:

public class HelloWorld {
    public static void main(String[] args){
      ProductInventoryEvent testin = TestingProduct.Inventory();
      System.out.println(testin);
    }
}

您應該更改的另一件事是TestingProduct class 中Inventory()方法的訪問修飾符。您應該使用 package 私有或公共訪問修飾符而不是私有訪問修飾符。 所以代碼應該是這樣的:

public class TestingProduct {
   static ProductInventoryEvent Inventory(){
      def invent = new ProductInventoryEvent(
            productId:'1',
            productIdType:'2',
            eventType:'3',
            eventDate: setDateNow(),
      )
      return invent;
   }
}

我還認為,您不能在父級 class 中調用私有方法。您必須將訪問修飾符更改為受保護

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM