[英]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.