Calling parseFrom() method for generic protobuffer class in java
generics, java, protocol-buffers
Solution
Every generated protobuf type contains a static member called `PARSER` which is an implementation of the `com.google.protobuf.Parser<T>` interface. Your `getObject` method simply needs to take a `Parser<T>` as a parameter. So then you'd call it like:
Foo foo = getObject(Foo.PARSER);
Problem
I'm calling an api to get the an input stream and then call static method parseFrom(inputstream) to convert it to the protobuffclass. If I do it with a specific class it works: ``` public CustomerDTOOuterClass.CustomerDTO GetCustomer() { CustomerDTOOuterClass.CustomerDTO customer = null; try { URL url = new URL("https://localhost:44302/Api/customer/1?"); HttpsURLConnection conn = (HttpsURLConnection)url.openConnection(); conn.setRequestMethod("GET"); conn.setRequestProperty("Content-Type", "application/x-protobuf"); conn.connect(); InputStream is = conn.getInputStream(); CustomerDTOOuterClass.CustomerDTO customer = CustomerDTOOuterClass.CustomerDTO.parseFrom(is); conn.disconnect(); } catch(Exception ex) { System.out.println("[ "+ex.getMessage()+" ]"); } return customer; } ``` but if I change it to generic type it fails because T doesn't have the method parseFrom, is there any interface I could implement in T so I can call the parseFrom method? ``` public T GetObject() { T object = null; try { URL url = new URL("https://localhost:44302/Api/customer/1?"); HttpsURLConnection conn = (HttpsURLConnection)url.openConnection(); conn.setRequestMethod("GET"); conn.setRequestProperty("Content-Type", "application/x-protobuf"); conn.connect(); InputStream is = conn.getInputStream(); T object = T.parseFrom(is); conn.disconnect(); } catch(Exception ex) { System.out.println("[ "+ex.getMessage()+" ]"); } return object; } ``` this is the error I get: Error:(68, 27) error: cannot find symbol method parseFrom(InputStream)