Foros del Web » Programación para mayores de 30 ;) » Java »

¿Por qué no compila este código?

Estas en el tema de ¿Por qué no compila este código? en el foro de Java en Foros del Web. ¿Alguien me pude decir por qué no se compila esta clase java con la versión SDK6 de SUN? Parece ser que con alguna versión anterior ...
  #1 (permalink)  
Antiguo 04/02/2010, 10:59
 
Fecha de Ingreso: enero-2010
Mensajes: 18
Antigüedad: 14 años, 3 meses
Puntos: 0
¿Por qué no compila este código?

¿Alguien me pude decir por qué no se compila esta clase java con la versión SDK6 de SUN?
Parece ser que con alguna versión anterior compilaba bien.

javac FileElement.java

//===================== FileElement.java =========================

package org.jfm.views;

import java.io.File;

public class FileElement extends File
implements Comparable
{

public FileElement(String pathname)
{
this(pathname, false);
}

public FileElement(String pathname, boolean topFile)
{
super(pathname);
setTopFile(topFile);
}

public String toString()
{
if(isTopFile())
return "..";
else
return getName();
}

public void setTopFile(boolean topFile)
{
this.topFile = topFile;
}

public boolean isTopFile()
{
return topFile;
}

public FileElement getRootFile()
{
return getRootFile(this);
}

private FileElement getRootFile(FileElement f)
{
String parentPath = f.getParent();
if(parentPath == null)
{
return f;
} else
{
FileElement parent = new FileElement(parentPath);
return getRootFile(parent);
}
}

public int compareTo(Object o)
{
FileElement el = (FileElement)o;
if(isDirectory() && !el.isDirectory())
return -1;
if(!isDirectory() && el.isDirectory())
return 1;
else
return toString().compareTo(el.toString());
}

private boolean topFile;
}
  #2 (permalink)  
Antiguo 04/02/2010, 13:44
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: ¿Por qué no compila este código?

bueno, si no compila, supongo que dará algún error. Sería de gran ayuda si lo pusieras.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 04/02/2010, 14:54
 
Fecha de Ingreso: enero-2010
Mensajes: 18
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: ¿Por qué no compila este código?

solicito perdón por no haber puesto el error que me envía el compilador, es el siguiente:



D:\Java File Manager\jfm\src\org\jfm\views\FileElement.java:10: java.lang.Comparable cannot be inherited with different arguments: <> and <java.io.File>
public class FileElement extends File
1 error

El error lo da en esta línea:
public class FileElement extends File implements Comparable

Este es un programa que he encontrado en Sourceforge, es open source, tiene los fuentes y ha sido compilado, pero cuando yo lo intento compilar encuentro este error, he buscado en la red pero no encuentro información.

Gracias por vuestra ayuda
ipadilla

Última edición por ipadilla; 04/02/2010 a las 15:04
  #4 (permalink)  
Antiguo 05/02/2010, 02:37
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: ¿Por qué no compila este código?

Por probar que no pase nada... prueba con esto.

public class FileElement extends File implements Comparable<java.io.File>
  #5 (permalink)  
Antiguo 05/02/2010, 02:44
 
Fecha de Ingreso: enero-2010
Mensajes: 5
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: ¿Por qué no compila este código?

Hola,
no soy ningún experto pero al parecer el error es causado debido a que la implementación de la interface Comparable debe hacerse de la forma en que dice Fuzzylog debido a que la clase de la cual extiendes (File) lo hace de esa forma.

Última edición por asd9090; 05/02/2010 a las 03:35
  #6 (permalink)  
Antiguo 05/02/2010, 12:56
 
Fecha de Ingreso: enero-2010
Mensajes: 18
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: ¿Por qué no compila este código?

Gracias a ambos: Fuzzylog y asd9090, lo probaré y os daré una respuesta.
ipadilla
  #7 (permalink)  
Antiguo 05/02/2010, 13:14
 
Fecha de Ingreso: enero-2010
Mensajes: 18
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: ¿Por qué no compila este código?

Fuzzylog y asd9090, lo prometido es deuda...

He logrado que esta clase funcione de la forma siguiente, pero no estoy seguro de que sea la forma más correcta. ¿Alguna sugerencia?.

=========================================== =======

// Source File Name: FileElement.java

package org.jfm.views;

import java.io.File;

public class FileElement extends File
implements Comparable
{

public FileElement(String pathname)
{
this(pathname, false);
}

public FileElement(String pathname, boolean topFile)
{
super(pathname);
setTopFile(topFile);
}

public String toString()
{
if(isTopFile())
&nbs p; return "..";
else
&nbs p; return getName();
}

public void setTopFile(boolean topFile)
{
this.topFile = topFile;
}

public boolean isTopFile()
{
return topFile;
}

public FileElement getRootFile()
{
return getRootFile(this);
}

private FileElement getRootFile(FileElement f)
{
String parentPath = f.getParent();
if(parentPath == null)
{
&nbs p; return f;
} else
{
&nbs p; FileElement parent = new FileElement(parentPath);
&nbs p; return getRootFile(parent);
}
}

public int compareTo(File o)
{
// FileElement el = (FileElement)o;
if(isDirectory() && !o.isDirectory())
&nbs p; return -1;
if(!isDirectory() && o.isDirectory())
&nbs p; return 1;
else
&nbs p; return toString().compareTo(o.toString());
}

private boolean topFile;
}

=================================================

ipadilla
  #8 (permalink)  
Antiguo 05/02/2010, 19:20
 
Fecha de Ingreso: enero-2010
Mensajes: 25
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: ¿Por qué no compila este código?

No soy un experto en Java ni algo por el estilo, simplemente sería bueno que respetes la declaración del método compareTo, que es el siguiente
public int compareTo(Object o)

El codigo seria asi:
- Haciendo el casting de Object a File varias veces

public int compareTo(Object o){
if(isDirectory() && !((File) (o)).isDirectory())
return -1;
if(!isDirectory() && ((File) (o)).isDirectory())
return 1;
else
return toString().compareTo(((File)(o)).toString());
}

- Haciendo el casting solo una vez.

public int compareTo(Object o){
File otro = (File)o;
if(isDirectory() && !otro.isDirectory())
return -1;
if(!isDirectory() && otro.isDirectory())
return 1;
else
return toString().compareTo(otro.toString());
}

Saludos!!
  #9 (permalink)  
Antiguo 06/02/2010, 02:23
 
Fecha de Ingreso: enero-2010
Mensajes: 18
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: ¿Por qué no compila este código?

Hola devshared,
con vuestras aportaciones lo iré mejoprando muchas gracias a todos.
ipadilla
  #10 (permalink)  
Antiguo 06/02/2010, 03:28
 
Fecha de Ingreso: enero-2010
Mensajes: 18
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: ¿Por qué no compila este código?

Hola devshared, aquí tienes tu propuesta realizada, tanto si hacemos el casting una vez como varias veces la clase funciona bien. Aquí tienes como he dejado ambas pruebas:

// - Haciendo el casting solo una vez.

package org.jfm.views;

import java.io.File;

public class FileElement extends File
implements Comparable<File>
{

public FileElement(String pathname)
{
this(pathname, false);
}

public FileElement(String pathname, boolean topFile)
{
super(pathname);
setTopFile(topFile);
}

public String toString()
{
if(isTopFile())
return "..";
else
return getName();
}

public void setTopFile(boolean topFile)
{
this.topFile = topFile;
}

public boolean isTopFile()
{
return topFile;
}

public FileElement getRootFile()
{
return getRootFile(this);
}

private FileElement getRootFile(FileElement f)
{
String parentPath = f.getParent();
if(parentPath == null)
{
return f;
} else
{
FileElement parent = new FileElement(parentPath);
return getRootFile(parent);
}
}
// - Haciendo el casting solo una vez.

public int compareTo(File o){
File FileElement = (File)o;
if(isDirectory() && !FileElement.isDirectory())
return -1;
if(!isDirectory() && FileElement.isDirectory())
return 1;
else
return toString().compareTo(FileElement.toString());
}
private boolean topFile;
}



// - Haciendo el casting varias veces.


package org.jfm.views;

Cast varias veces:

import java.io.File;

public class FileElement extends File
implements Comparable<File>
{

public FileElement(String pathname)
{
this(pathname, false);
}

public FileElement(String pathname, boolean topFile)
{
super(pathname);
setTopFile(topFile);
}

public String toString()
{
if(isTopFile())
return "..";
else
return getName();
}

public void setTopFile(boolean topFile)
{
this.topFile = topFile;
}

public boolean isTopFile()
{
return topFile;
}

public FileElement getRootFile()
{
return getRootFile(this);
}

private FileElement getRootFile(FileElement f)
{
String parentPath = f.getParent();
if(parentPath == null)
{
return f;
} else
{
FileElement parent = new FileElement(parentPath);
return getRootFile(parent);
}
}

// - Haciendo el casting varias veces.

public int compareTo(File o)
{
if(isDirectory() && !((File) (o)).isDirectory())
return -1;
if(!isDirectory() && ((File) (o)).isDirectory())
return 1;
else
return toString().compareTo(((File)(o)).toString());
}

private boolean topFile;
}

//==================

Si aun crees que se puede mejorar, no dudes en proponerlo.
Muchas gracias
ipadilla

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:27.