Почему я получаю и как решить эту ошибку «String to object типа <objecttype>» - PullRequest
0 голосов
/ 31 мая 2019

Я (будучи абсолютным новичком) пытаюсь создать простой инструмент, который создает некоторые объекты и связывает их. Объектами являются: Клиенты Лицензии (2 вида, расширяемый класс)

Идея состоит в том, чтобы использовать (одно из) название компании клиента при создании лицензии, чтобы лицензия была связана с клиентом. Я использую ArrayLists для хранения данных.

Я пытался использовать метод получения для Customer cCompany, но когда я пытаюсь создать новый объект лицензии, я получаю ошибки о несовместимых типах (строка для объекта типа customer)

Как я могу исправить эту ошибку?

Любая помощь высоко ценится, но, пожалуйста, объясните хорошо, я абсолютный новичок. Я, вероятно, усложняю вещи ....

Некоторые выдержки из кода:

Из основного:

public class Main {

    public static void main(String[] args) {
        //Create customers
        List <Customer> customers = new ArrayList <> (10);
        customers.add(new Customer("TestCompany","John Doe",1234567890,"John@testcompany.com"));


....

//Create Elvis licenses (based on superclass License)
List <ElvisLicense> ellicenses = new ArrayList <> (10);
ellicenses.add(new ElvisLicense("TestCompany","VendorA",1234,"1234-A","Solutions Server gold","1234-dtbk-87654-nlof",10, true , true));

Класс: Заказчик:

class Customer {
    String cCompany;
    private String cName;
    private int cPhone;
    private String cEmail;

    public Customer( String cCompany, String cName,int cPhone, String cEmail)
    {
    this.cCompany = cCompany;
    this.cName = cName;
    this.cPhone = cPhone;
    this.cEmail = cEmail;
    }

    //This getter should be used to link the license to the customer (Done in License.java)
    public String getcCompany() {
        return cCompany;
    }

Лицензия класса (суперкласс)

class License {
// Used no modifier to set access for Class/Package and Subclass inside the package
Customer licenseCompany;
String lVendor;
int lContractNumber;
String lCertificateNumber;
String lProductName;
String lLicenseKey;
int lNumberOfSeats;


    public License(Customer cCompany, String lVendor, int lContractNumber, String lCertificateNumber, 
            String lProductName, String lLicenseKey, int lNumberOfSeats)
    {
    licenseCompany = cCompany;
    this.lVendor = lVendor;
    this.lVendor = lVendor;
    this.lContractNumber = lContractNumber;
    this.lCertificateNumber = lCertificateNumber;
    this.lProductName = lProductName;
    this.lLicenseKey = lLicenseKey;
    this.lNumberOfSeats = lNumberOfSeats;    
    }


    public Customer getLicenseCompany() {
        return licenseCompany;
    }

    public void setLicenseCompany(Customer licenseCompany) {
        this.licenseCompany = licenseCompany;
    }


//preparations to allow for example printing the content of an arraylist element
    @Override
    public String toString(){
    return "Customer name " + getLicenseCompany()  + "\n" + "Vendor name " + getlVendor()  + "\n" + "Contract number: " + getlContractNumber() + "\n"
               + "Certificate number: " + getlCertificateNumber() + "\n" + 
                "Product name " + getlProductName()  + "\n" + "Licence key: " + getlLicenseKey() + "\n"
               + "Number of seats: " + getlNumberOfSeats();
}


}

и расширенный класс:

public class ElvisLicense extends License{

private boolean elIsBundle;
private boolean elIsSubscription;


public ElvisLicense(
        Customer licenseCompany,
        String lVendor,
        int lContractNumber,
        String lCertificateNumber, 
        String lProductName,
        String lLicenseKey,
        int lNumberOfSeats,
        boolean elIsBundle,
        boolean elIsSubscription
        )

    {
    super(
            licenseCompany,
            lVendor,
            lContractNumber,
            lCertificateNumber,
            lProductName,
            lLicenseKey,
            lNumberOfSeats);

    this.elIsBundle = elIsBundle;
    this.elIsSubscription = elIsSubscription;
    }  


.....



@Override
public String toString(){
    return "Customer name " + licenseCompany  + "\n" 
            + "Vendor name " + lVendor  + "\n" 
            + "Contract number: " + lContractNumber + "\n"
            + "Certificate number: " + lCertificateNumber + "\n" 
            + "Product name " + lProductName  + "\n" 
            + "Licence key: " + lLicenseKey + "\n"
            + "Number of seats: " + lNumberOfSeats + "\n"
            + "Number of seats: " + elIsBundle + "\n" 
            + "Number of seats: " + elIsSubscription;
}

}

Я ожидаю, что при создании новой лицензии будет использоваться имя клиента.

Ответы [ 2 ]

1 голос
/ 31 мая 2019

Неправильная нижняя строка.

ellicenses.add(new ElvisLicense("TestCompany","VendorA",1234,"1234-A","Solutions Server gold","1234-dtbk-87654-nlof",10, true , true));

Поскольку лицензия требует, чтобы объект клиента указывал параметр.Вместо этого вы должны сначала создать объект customer.

ellicenses.add(new ElvisLicense(new Customer("TestCompany","VendorA",1234,"1234-A"),"Solutions Server gold","1234-dtbk-87654-nlof",10, true , true));

для повторного использования этого customer list, чтобы избежать создания компании.

for(Customer customer : customers){
   // here you need some way to offer other parameters except customer parameter.
   License license = new new ElvisLicense(customer,"Solutions Server gold","1234-dtbk-87654-nlof",10, true , true);
   ellicenses.add(license);
}
0 голосов
/ 31 мая 2019

Вам нужно использовать один из объектов Customer, который вы уже создали при создании объекта ElvisLicense.Чтобы упростить поиск клиента по имени, я предлагаю вам сохранить его на карте, а не в списке с именем в качестве ключа.

Map<String, Customer> customerMap = new HashMap<>();
Customer customer = new Customer("TestCompany","John Doe",1234567890,"John@testcompany.com"));
customerMap.put(customer.getcCompany(), customer);

, поэтому при создании лицензии вы ищите клиента

List <ElvisLicense> ellicenses = new ArrayList <> (10);
Customer customer = customerMap.get("TestCompany");
if (customer != null) {
    ElvisLicense license = new ElvisLicense(customer,"VendorA",1234,"1234-A","Solutions Server gold","1234-dtbk-87654-nlof",10, true , true));
    ellicenses.add(license);
} else {
   //If the customer isn't found you need some kind of error handling, better than below :)
   System.out.println("Can't create a license, no customer found");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...