У меня есть интерфейс, который в основном выглядит следующим образом:
public interface ISetting<T> {
public T getDefault();
public T value();
public void set(T value);
public String getName();
public default String getValueName() {
Object obj = value();
if (obj instanceof Boolean) {
return (boolean)obj ? "Yes" : "No";
}
return obj.toString();
}
}
И затем в другом классе у меня есть список ISetting<?>
private List<ISetting<?>> settings = Arrays.asList(
new ClassMode(),
new EndMode(),
new PlayerLives(),
new JoinMidGame(),
new ScoreboardDisplay(),
new LifePerKill(),
new ExplosiveBullets(),
new ReloadTime());
И все это прекрасно работает! Однако платформа, в которой я использую мой код, не поддерживает Java 8, поэтому я должен использовать Java 7, и здесь, где возникают проблемы.
Если я установил цель Maven в 1.7, как это в моем pom.xml:
<configuration>
<source>1.8</source>
<target>1.7</target>
</configuration>
Затем код отлично компилируется без ошибок или чего-то еще. Однако, когда я пытаюсь запустить код, он дает мне эту ошибку:
java.lang.ClassFormatError: метод getValueName в классе net/uniqraft/murder/match/settings/ISetting имеет незаконные модификаторы: 0x1
Я попробовал Google, но не смог найти ничего, что я понял или, казалось, был применим в моем случае.
Итак, я думал, я просто создам всю базу кода в Java 7:
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
Первая ошибка, которую я вижу, это:
Способы по умолчанию разрешены только на уровне источника 1,8 или выше
Это невероятно раздражает, и я не знаю, как обойти это. Большая часть моего кода зависит от реализации по умолчанию. Думаю, мне просто нужно использовать абстрактные классы?
Но более проблематичная ошибка, которую я вижу, находится на List<Setting<?>>
у меня:
Type mismatch: cannot convert from List<ISetting<? extends Object&Comparable<?>&Serializable>> to List<ISetting<?>>
Я понятия не имею, что это значит или как это исправить. Предложения quickfix Eclipse не помогают.
В случае, если вам нужно увидеть полный незанятый класс ISetting или полный стек, я поместил их извне, поскольку они довольно пространны: