Невозможно получить конструктор из другого класса в одном и том же пакете для распознавания. - PullRequest
0 голосов
/ 24 марта 2012

Итак, эти 2 файла, которые я собираюсь опубликовать, находятся в моем пакете базы данных. Класс DBBinding просто должен создать объект со строкой для ключа и один для значения. Затем DBrecord будет хранить коллекцию DBBindings, которые имеют одинаковую строку ключей, но строки различных значений. Почему-то я не могу придумать / найти правильный способ сделать метод add в DBrecord так, чтобы он вызывал конструктор класса / объектов DBBinding.

Это метод, который должен добавить привязку:

private void addRecord(String key_, String value_)
{
    //DBBinding myDBBinding=new DBBinding(key_, value_);//constructor not defined error
    //DBBinding myDBBinding(key_,value_);
    //DataBase.DBBinding myDBBinding=new DataBase.DBBinding(key_, value_);//constructor not defined error

}

Вот код DBBinding, за которым следует код DBrecord.

package DataBase;

public class DBBinding {

    private String key;
    private String value;

    public void DBBinding(String key_, String value_)
    {
        String key =new String(key_);
        String value=new String(value_);
    }

    //public String toString()
    //{return key+": "+value;}

}

и

package DataBase;
//package DataBase.*;
import DataBase.*;//did not help ... ?

public class DBrecord {

    boolean select;
    String key;
    //need some type of collection to keep bindings. 

    public void DBrecord()
    {
        DBrecord myRecord=new DBrecord();
        select=false;
    }

    private void addRecord(String key_, String value_)
    {
        //DBBinding myDBBinding=new DBBinding(key_, value_);//constructor not defined error
        //DBBinding myDBBinding(key_,value_);
        //DataBase.DBBinding myDBBinding=new DataBase.DBBinding(key_, value_);//constructor not defined error

    }

    public String toString()
    {
        //out put key first then all values in collection/group/record. use correct formatting. 
    }



}

Ответы [ 2 ]

4 голосов
/ 24 марта 2012

В классе DBBinding у вас должно быть public DBBinding(String key_, String value_), void делает «конструктор» фактически методом :-)

У вас такая же ошибка в DBrecord.

Кстати, не делайте этого:

String key =new String(key_);

Строки неизменны, ничего не произойдет, если вы «поделитесь» ими.Но ваш код заставляет Java создавать новый объект с абсолютно одинаковым значением.Так что используйте просто

String key = key_;

Однако, в вашем случае даже это неправильно, поскольку вы создаете новую локальную переменную key, "затеняя" переменную класса key.Смотрите здесь для объяснения.

Так что в целом DBBinding должно выглядеть так:

package DataBase;

public class DBBinding {

    private String key;
    private String value;

    public DBBinding(String key_, String value_)
    {
        key = key_;
        value =  value_;
    }
    ...
}
2 голосов
/ 24 марта 2012

Если вы хотите, чтобы ваш код работал, удалите конструкцию void из ваших конструкторов.

Различия в сигнатурах Конструкторы и методы отличаются в трех аспектах сигнатуры: модификаторы, тип возвращаемого значения и имя,Как и методы, конструкторы могут иметь любой из модификаторов доступа: публичный, защищенный, приватный или ни одного (часто называемый пакетным или дружественным).В отличие от методов, конструкторы могут принимать только модификаторы доступа.Следовательно, конструкторы не могут быть абстрактными, окончательными, собственными, статическими или синхронизированными.

Типы возвращаемых данных также очень разные.Методы могут иметь любой допустимый тип возвращаемого значения или не иметь возвращаемого типа, в этом случае возвращаемый тип задается как void.Конструкторы не имеют типа возврата, даже не void.

...