簡體   English   中英

如何從Java中的方法返回通用類型

[英]How to return generic type from a method in java

我是泛型新手。 這是我的課。

public interface Animal {    
    void eat();
}

public class Dog implements Animal {    
   public void eat() {   
      System.out.println("Dog eats biscuits");    
   }    
}

public class Cat implements Animal {    
   public void eat() {    
      System.out.println("Cat drinks milk");    
   }    
}

現在,我希望以通用方式使用這些類。

public class GenericExample {

   public <T extends Animal> T method1() {    
      //I want to return anything that extends Animal from this method
      //using generics, how can I do that    
   }

   public <T extends Animal> T method2(T animal) {    
      //I want to return anything that extends Animal from this method
      //using generics, how can I do that
   }

   public static void main(String[] args) {    
      Dog dog = method1(); //Returns a Dog    
      Cat cat = method2(new Cat()); //Returns a Cat    
   }    
}

如何從方法“ method1”和“ method2”返回通用類型(可能是貓或狗)。 我有幾種返回“ T擴展動物”的方法,因此最好在方法級別或類級別聲明泛型。

您不能有一個返回泛型類型的方法,並且期望能夠在不使用強制轉換的情況下在該方法的調用者中訪問該類型,除非可以從該方法的參數推斷出該類型。 因此,您main的示例將無效。

因此,您要么不用泛型,要么手動轉換返回類型

public Animal method1()
    Dog dog = (Dog)method1()

或讓方法返回子類類型開始。

public Dog method1()
    Dog dog = method1()

或者您可以使用泛型,並在調用方法時指定類型

public <T extends Animal> T method1()
    Dog dog = <Dog>method1()

或傳遞可從中推導類型的參數(第二種方法已滿足該參數):

public <T extends Animal> T method1(Class<T> classOfreturnedType)
    Dog dog = method1(Dog.class)

還要指出,如果它本身是static ,則只能從static main調用method1

method1只是說它返回一個動物。 返回任何Animal實例,代碼將編譯:

return new Dog();

第二種方法說,它返回的動物的類型與作為參數給出的動物的類型相同。 因此,您可以返回參數本身,並進行編譯。 您已經說過該方法必須返回的類型,但是您沒有說該方法必須返回的類型,因此無法實現它。 我只能說是return animal; 會編譯。

暫無
暫無

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

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