2016-04-11 2 views
1

У меня есть код, который я переношу на Gradle, когда я запускаю его на Eclipse (без Gradle он работает нормально), но когда я использую плагин Eclipse или пытаюсь запустить его в командной строке, у меня возникают проблемы с оператором бриллианта.Gradle on Eclipse, алмазный оператор не распознан?

Например, для этого класса:

import java.util.SortedSet; 

/** 
* Holds inventory of currency, calculates balance, makes change. 
* Immutable. 
*/ 
public final class Bank { 
/** 
* Inventory of currencies for the bank. 
*/ 
private final Inventory<Currency> inventory; 

public Inventory<Currency> getInventory() { 
    return inventory; 
} 

/** 
* Calculate the balance (in cents) of the currently held currencies. 
* 
* @return the current balance (in cents) 
*/ 
public long calculateBalance() { 
    long balance = 0L; 
    for (Currency currency : Currency.values()) { 
     balance += currency.getCents() * inventory.quantity(currency); 
    } 
    return balance; 
} 

/** 
* Create a bank made up of currencies from this bank that add up as close 
* as possible to the change amount requested. Exact change is not 
* guaranteed. It's a good idea to check that the calculated balance is 
* the same as the amount you expect. 
* 
* @param amount the amount of change needed 
* @return a bank of change made from as much currency that could be used 
*/ 
public Bank makeChange(final long amount) { 
    long change = amount; 
    Bank changeBank = new Bank(); 
    final SortedSet<Currency> descending = Currency.descending(); 
    for (Currency largest : descending) { 
     int quantity = inventory.quantity(largest); 
     final long cents = largest.getCents(); 
     while (quantity > 0 && change >= cents) { 
      change = change - cents; 
      quantity = quantity - 1; 
      changeBank = changeBank.deposit(largest); 
     } 
    } 
    return changeBank; 
} 

/** 
* Bank constructor. Fills out a new Bank with 0 amounts for each currency. 
*/ 
public Bank() 
{ 
    this.inventory = new Inventory <> (Currency.values()); 
} 

/** 
* Private Bank constructor. Used for returning new, modified instances. 
* 
* @param inventory the new inventory 
*/ 
private Bank(final Inventory<Currency> inventory) { 
    this.inventory = new Inventory<>(Currency.values()).add(inventory); 
} 

/** 
* Deposit the currencies from the incoming Bank into this Bank. 
* 
* @param bank incoming Bank 
* @return new Bank with this Bank's currencies, incoming Bank's currencies 
*/ 
public Bank deposit(final Bank bank) { 
    if (bank == null) { 
     return this; 
    } 
    return new Bank(inventory.add(bank.getInventory())); 
} 

/** 
* Deposit the currency incoming into this Bank. 
* 
* @param currency incoming currency 
* @return new Bank with this Bank's currencies, incoming currency 
*/ 
public Bank deposit(final Currency currency) { 
    if (currency == null) { 
     return this; 
    } 
    return new Bank(inventory.add(currency)); 
} 

/** 
* Withdraws the currencies from the passed in Bank from this Bank. If 
* there aren't enough of any particular currency, set the quantity to 0. 
* 
* @param bank the Bank of currencies to withdraw 
* @return a Bank with the currencies of the passed Bank withdrawn 
*/ 
public Bank withdraw(final Bank bank) { 
    if (bank == null) { 
     return this; 
    } 
    return new Bank(inventory.subtract(bank.getInventory())); 
} 

}

я получаю illegat начало ошибки типа:

illegal start of type this.inventory <> (Currency.values()); 
            ^

Я знаю, что оператор алмаз может быть использован с JDK7 иметь тип вывода с дженериками, поэтому я озадачен тем, почему я получаю эту ошибку. Можете ли вы помочь мне исправить это, пожалуйста?

Заранее спасибо

+0

Где this.inventory в коде вы публикуемую ??? –

ответ

2

Если вы не указали версию Java для использования, Gradle будет скомпилировать код, используя версию виртуальной машины Java используется в настоящее время. Если вы видите сообщение об ошибке для оператора бриллианта, вероятно, это означает, что версия Java, которую вы используете в командной строке, старше 1.7. Вам нужно будет перейти на более позднюю версию (или установить несколько версий, сделать другую версию активной).

Это почти всегда хорошая идея, чтобы явно указать версию, добавив следующие строки в ваш файл build.gradle:

sourceCompatibility = 1.7 
targetCompatibility = 1.7 

Ссылка: https://docs.gradle.org/current/userguide/java_plugin.html

Смежные вопросы