Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java generic return type

Tags:

java

generics

I'd like to write a method that can accept a type param (or whatever the method can figure out the type from) and return a value of this type so I don't have to cast the return type.

Here is a method:

public Object doIt(Object param){     if(param instanceof String){         return "string";     }else if(param instanceof Integer){         return 1;     }else{         return null;     } } 

When I call this method, and pass in it a String, even if I know the return type will be a String I have to cast the return Object. This is similar to the int param.

How shall I write this method to accept a type param, and return this type?

like image 820
Colby77 Avatar asked Apr 19 '10 17:04

Colby77


People also ask

How do I return a generic class type in Java?

(Yes, this is legal code; see Java Generics: Generic type defined as return type only.) The return type will be inferred from the caller. However, note the @SuppressWarnings annotation: that tells you that this code isn't typesafe. You have to verify it yourself, or you could get ClassCastExceptions at runtime.

What is type as generic in Java?

Definition: “A generic type is a generic class or interface that is parameterized over types.” Essentially, generic types allow you to write a general, generic class (or method) that works with different types, allowing for code re-use.

Is void a return type in Java?

Any method declared void doesn't return a value. It does not need to contain a return statement, but it may do so.

How do you return a type in Java?

Returning a Value from a Method In Java, every method is declared with a return type such as int, float, double, string, etc. These return types required a return statement at the end of the method. A return keyword is used for returning the resulted value. The void return type doesn't require any return statement.


1 Answers

if you don't want to have a specific interface to handle that stuff you can use a generic method in this way:

public <T> T mymethod(T type) {   return type; } 

Mind that in this way the compiler doesn't know anything about the type that you plan to use inside that method, so you should use a bound type, for example:

public <T extends YourType> T mymethod(T type) {   // now you can use YourType methods   return type; } 

But you should be sure that you need a generic method, that means that the implementation of doIt will be the same for all the types you are planning to use it with. Otherwise if every implementation is different just overload the methods, it will work fine since return type is not used for dynamic binding:

public String my(String s) {   return s; }  public int my(int s) {   return s; }  int i = my(23); String s = my("lol"); 
like image 68
Jack Avatar answered Sep 20 '22 14:09

Jack