LINUX.ORG.RU

Projectivity и type erasure

 ,


0

2

Понадобилось мне собрать Projectivity (это такой опенсорс таск-менеджер). Проекты в нетбинс я добавил, библиотеки подключил. Но тут появилась неожиданная проблема. Есть, например, класс AttachmentDAO, а в нем пара методов с такой сигнатурой:

private static MetaDataDTO buildMetaDataDTO(Collection<String> row) throws DAOException
//и
private static Collection<MetaDataDTO> buildMetaDataDTO(Collection<Collection<String>> bulkdata) throws DAOException
На эти строчки и ругается компилятор. Я в java не силен, но из нескольких источников узнал, что для обратной совместимости используется такая фигня, как type erasure. И что после удаления типов, эти методы будут выглядеть так:
private static MetaDataDTO buildMetaDataDTO(Collection row) throws DAOException
//и
private static Collection<MetaDataDTO> buildMetaDataDTO(Collection bulkdata) throws DAOException
т.е. сигнатура у них станет одинаковой. И я совсем не представляю, как решить эту проблему. У авторов-то вроде как компилируется этот код. Что можно изменить, чтобы и у меня всё скомпилилось


Сообщение компилятора в студию. Штатные телепаты все в отпуске.

anonymous
()

На что именно ругается?

kovrik ★★★★★
()

Что можно изменить, чтобы и у меня всё скомпилилось

Использовать для сборки ant/maven файл, идущий в комплекте с сырцами?

anonymous
()

Выглядит странно. По-моему такое и не должно собираться.

Legioner ★★★★★
()

Не вижу ничего криминального. Сообщение компилятора в студию.

BattleCoder ★★★★★
()
Ответ на: комментарий от migesok

Господин, вы упороты:

public class AntiUporin
{
	private static MetaDataDTO buildMetaDataDTO(Collection<String> row)
			throws DAOException
	{
		for (String s: row)
			System.out.println(s);
		return new MetaDataDTO();
	}
	private static Collection<MetaDataDTO> buildMetaDataDTO(
			Collection<Collection<String>> bulkdata) throws DAOException
	{
		for(Collection<String> c:bulkdata)
			for (String s: c)
				System.out.println(s);
		return new ArrayList<MetaDataDTO>();
	}
	public static void main(String[] args)
	{
		try
		{
			buildMetaDataDTO(new ArrayList<String>()
			{
				{
					add("Съешь ещё этих мягких французских булок 1");
				}
			});
			buildMetaDataDTO(new ArrayList<Collection<String>>()
			{
				{
					add(new ArrayList<String>()
					{
						{
							add("Съешь ещё этих мягких французских булок");
							add("Да выпей антиупорину");
						}
					});
				}
			});
		} catch (DAOException e)
		{

		}
	}
}

Съешь ещё этих мягких французских булок 1
Съешь ещё этих мягких французских булок
Да выпей антиупорину

Компилял 1.6

ZUKMAN
()
Ответ на: комментарий от ZUKMAN

Нужно выкладывать минимальный компилябельный вариант, ну или чтобы нужную ошибку выдавал, а не сообщение о неизвестных типах.

crowbar
()
Ответ на: комментарий от ZUKMAN
import java.util.ArrayList;
import java.util.Collection;

class MetaDataDTO {}
class DAOException extends RuntimeException {}

public class AntiUporin
{

	private static MetaDataDTO buildMetaDataDTO(Collection<String> row)
			throws DAOException
	{
		for (String s: row)
			System.out.println(s);
		return new MetaDataDTO();
	}
	private static Collection<MetaDataDTO> buildMetaDataDTO(
			Collection<Collection<String>> bulkdata) throws DAOException
	{
		for(Collection<String> c:bulkdata)
			for (String s: c)
				System.out.println(s);
		return new ArrayList<MetaDataDTO>();
	}
	public static void main(String[] args)
	{
		try
		{
			buildMetaDataDTO(new ArrayList<String>()
			{
				{
					add("Съешь ещё этих мягких французских булок 1");
				}
			});
			buildMetaDataDTO(new ArrayList<Collection<String>>()
			{
				{
					add(new ArrayList<String>()
					{
						{
							add("Съешь ещё этих мягких французских булок");
							add("Да выпей антиупорину");
						}
					});
				}
			});
		} catch (DAOException e)
		{

		}
	}
}
% javac -version
javac 1.7.0_45
% javac AntiUporin.java
AntiUporin.java:17: error: name clash: buildMetaDataDTO(Collection<Collection<String>>) and buildMetaDataDTO(Collection<String>) have the same erasure
	private static Collection<MetaDataDTO> buildMetaDataDTO(
	                                       ^
1 error
Legioner ★★★★★
()

т.с., компилируй компилятором eclipse (ecj) в режиме совместимости с Java 1.6. Придется либо скрипты сборки править, либо импортировать проект в eclipse

crowbar
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.