java - retorno - El tipo List no es genérico; no se puede parametrizar con argumentos
tipo comodin java (4)
Agregar java.util.list
resolverá su problema porque la interfaz de la Lista que está tratando de usar es parte del paquete java.util.list
.
import java.awt.List;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.InputStreamReader;
import java.util.ArrayList;
import javax.imageio.ImageIO;
import org.apache.commons.codec.binary.Base64;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.omg.DynamicAny.NameValuePair;
public class Upload {
public static void main (String[] args) {
System.out.println(Imgur("C://Users//username//Desktop//image.jpg", "clientID"));
}
public static String Imgur (String imageDir, String clientID) {
//create needed strings
String address = "https://api.imgur.com/3/image";
//Create HTTPClient and post
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(address);
//create base64 image
BufferedImage image = null;
File file = new File(imageDir);
try {
//read image
image = ImageIO.read(file);
ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
ImageIO.write(image, "png", byteArray);
byte[] byteImage = byteArray.toByteArray();
String dataImage = new Base64().encodeAsString(byteImage);
//add header
post.addHeader("Authorization", "Client-ID" + clientID);
//add image
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
nameValuePairs.add(new BasicNameValuePair("image", dataImage));
post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
//execute
HttpResponse response = client.execute(post);
//read response
BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String all = null;
//loop through response
while (rd.readLine() != null) {
all = all + " : " + rd.readLine();
}
return all;
}
catch (Exception e){
return "error: " + e.toString();
}
}
}
Así que tengo ese código y lo recibí de subirlo a Imgur v3 usando los errores de Java https y recibo un error en la línea 50 de "Lista" diciéndome
El tipo List no es genérico; no se puede parametrizar con argumentos
¿Qué puedo hacer para resolver esto?
Estoy usando http://hc.apache.org/httpclient-3.x/ y quiero cargar una imagen para imgur usando su API v3.
EDITAR: Después de cambiar la importación ahora obtengo estos errores.
Eso resuelve eso, pero dame dos errores más.
nameValuePairs.add(new BasicNameValuePair("image", dataImage));
El método add (NameValuePair) en el tipo List no es aplicable para los argumentos (BasicNameValuePair)
Y
post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
El constructor UrlEncodedFormEntity (Lista) no está definido
Intenta importar
java.util.List;
en lugar de
java.awt.List;
Obtuve el mismo error, pero cuando hice lo siguiente, resolvió el problema.
En lugar de escribir así:
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
usa el siguiente:
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
Su importación tiene un error sutil:
import java.awt.List;
Debería ser:
import java.util.List;
El problema es que tanto awt
como el paquete util de Java proporcionan una clase llamada List
. El primero es un elemento de visualización, el último es un tipo genérico utilizado con colecciones. Además, java.util.ArrayList
extiende java.util.List
, no java.awt.List
por lo que si no fuera por los genéricos, todavía habría sido un problema.
Editar: (para abordar otras preguntas formuladas por OP) Como respuesta a su comentario, parece que hay otro problema de importación sutil.
import org.omg.DynamicAny.NameValuePair;
debiera ser
import org.apache.http.NameValuePair
nameValuePairs
ahora usa el parámetro de tipo genérico correcto, el argumento genérico para el new UrlEncodedFormEntity
, que es List<? extends NameValuePair>
List<? extends NameValuePair>
, se vuelve válido, ya que su NameValuePair ahora es el mismo que su NameValuePair. Antes, org.omg.DynamicAny.NameValuePair
no org.omg.DynamicAny.NameValuePair
org.apache.http.NameValuePair
y el nombre abreviado NameValuePair
evaluaba como org.omg...
en su archivo, pero org.apache...
en su código.