簡體   English   中英

非泛型類中的Java泛型問題

[英]Trouble with Java generics in non-generic class

public class method
{
    private static class Foo
    {
        public void hello() { System.out.println("Foo"); }
    }

    private static class Bar
    {
        public void hello() { System.out.println("Bar"); }
    }

    private static <T> void hello(T typ)
    {
        typ.hello();
    }

    public static void main(String args[])
    {
        Foo foo = new Foo();
        Bar bar = new Bar();
        hello(foo);
        hello(bar);
    }
}

我在這里查看了有關泛型的其他問題,但是盡管我在此處看到了所有內容並應用於我編寫的代碼,但我的Java代碼仍然有問題。 我已經解決了上面代碼中的問題。 當我嘗試編譯上面的代碼時,出現以下錯誤:

method.java:15: error: cannot find symbol
        typ.hello();
           ^
  symbol:   method hello()
  location: variable typ of type T
  where T is a type-variable:
    T extends Object declared in method <T>hello(T)

可能是我正在嘗試使用原本不是設計要使用的泛型來做某事,但是基於我對文檔的理解,這應該行得通。 當然,在閱讀文檔時,我的想法是我可以做這樣的事情,這肯定會影響我對此的理解。

謝謝

這是您的問題:

private static <T> void hello(T typ)

T不會擴展任何實現名為“ Hello”的方法的內容。

相反,將其替換為

 private static <T extends ClassThatHasHello> void hello(T type)

和班級:

 public class ClassThatHasHello {
      public void hello() { }
 }

您將T定義為Object的子類型。 沒有任何類型限制。 對象沒有hello()方法

您可以為Foo and Bar創建接口或超級類型,然后<T extends SuperType>

您需要使用一個interface 這有效:

private interface Hello {
  public void hello();
}

private static class Foo implements Hello {
  @Override
  public void hello() {
    System.out.println("Foo");
  }
}

private static class Bar implements Hello  {
  @Override
  public void hello() {
    System.out.println("Bar");
  }
}

private static <T extends Hello> void hello(T typ) {
  typ.hello();
}

public static void main(String args[]) {
  Foo foo = new Foo();
  Bar bar = new Bar();
  hello(foo);
  hello(bar);
}

您正在使用泛型,並且嘗試調用類型T的hello方法,但您不知道那是什么類型。 如果您確定它具有hello方法,請使用強制轉換

暫無
暫無

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

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