ArrayList odczyty statycznej składowej

ArrayList odczyty statycznej składowej
0

Witam,
stworzyłem klasę MyClass zawierającą parę składowych i w innej klasie tworzę ArrayList obiektów tej stworzonej klasy. W tej MyClass mam statyczną składową i statyczne metody ustawiające i odczytujące tą składową. I mam mały problem ponieważ nie wiem jak się dostać do tych metod odczytujących i zapisujących tą składową statyczną.
Jak próbuję napisać:

Kopiuj
arrayListMyClass.getStaticInt();

lub

Kopiuj
arrayListMyClass.get(0).getStaticInt();

to pokazuje mi cannot resolve method.

Zobacz pozostałe 9 komentarzy
ER
@azalut zrobiłem jak radziłeś. Stworzyłem klasę singleton z polem które przetrzymuje tą wspólną wartość dla wszystkich obiektów mojej klasy. A w mojej klasie dodałem by zawierała obiekt tej klasy(singleton) jednak nadal nie działa to tak jak chciałem, ponieważ jak stworzę np. 3 obiekty w ramach jednej "sesji" to one mają jeden obiekt tego singletona i jedną wspólną wartość. Jednak jak zapiszę to do Listy a następnie zapisze w pliku. A następnie wczytam z pliku i załaduję do Listy a następnie dodam nowy obiekt do tej listy to ma on już osobny obiekt singleton.
azalut
a gdybyś zamiast sigletona stworzył klase która zapisuje ci tę wartość przetrzymywana do pliku txt na przykład, wtedy byś miał pewność, że nowy obiekt też bedzie się tyczył tego samego pliku txt? :P
Lukasz_
Tak w ogóle to przypuszczam że cały myk tutaj opiera się na tym twoim odczytywaniu i zapisywaniu do pliku. Po pierwsze po co, po drugie jak to robisz. Bo wiadomo że zapisana klasa do pliku txt jako zwykły zbiór stringów nie ma żadnych właściwości, więc musisz nam tu trochę więcej opowiedzieć. Share your story.
ER
@Lukasz_ Nie zapisuje do pliku txt, tylko w książce "Java, rusz głową" przeczytałem o serializacji klas i zapisuję w ten sposób, ponieważ jest on bezpieczniejszy, ponieważ nie posiadając klasy wraz z jej niepowtarzalnym id niemożna jej odczytać i edytować, dlatego też specjalnie stworzyłem bibliotekę z tą klasą wraz z klasami odczytującymi i zapisującymi ArrayList z obiektami tej klasy, niżej w moim poście jest kod klasy która jest serializowana (oczywiście NIE MA w niej pola z obiektem klasy singleton bo była ona wcześniej pisana)
ER
@Lukasz_ Jutro edytuje ten kod i dopiszę tą drobną zmianę.
bakeraw2
  • Rejestracja:około 14 lat
  • Ostatnio:ponad 5 lat
  • Postów:400
0

Dlaczego chcesz coś takiego zrobić? Pokaż cały kod, ponieważ pewnie da się to zrobić w inny sposób.

edytowany 1x, ostatnio: bakeraw2
ER
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 8 lat
  • Postów:14
0

@bakeraw2
Piszę aplikację do robienia testów i każdy obiekt klasy TestFile reprezentuje jedno pytanie wraz z odpowiedziami. Dodatkowo tworząc taki test chcę dodać możliwość podania czasu odpowiedzi na dane pytanie. Po wybraniu z bazy pytań do testu mają one zostać wrzucone do ArrayList i wrzucone do pliku i chcę by te pojedyncze czasy pytań były sumowane i zapisane jako czas na cały test dlatego chciałem użyć składowej statycznej która jest wspólna dla wszystkich obiektów danej klasy.

Kopiuj
public class TestFile implements Serializable {
    private String question;
    private String answer_correct;
    private String[] answer_incorrect = new String[3];
    private int time;
    private static int gTime;

    public TestFile() {
    }

    public String getQuestion() {
        return question;
    }

    public void setQuestion(String question) {
        this.question = question;
    }

    public String getAnswer_correct() {
        return answer_correct;
    }

    public void setAnswer_correct(String answer_correct) {
        this.answer_correct = answer_correct;
    }

    public String[] getAnswer_incorrect() {
        return answer_incorrect;
    }

    public void setAnswer_incorrect(String[] answer_incorrect) {
        this.answer_incorrect = answer_incorrect;
    }

    public int getTime() {
        return time;
    }

    public void setTime(int time) {
        this.time = time;
    }

    public static int getgTime() {
        return gTime;
    }

    public static void setgTime(int gTime) {
        TestFile.gTime = gTime;
    }


bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

A gdzie jest metoda getStaticInt()?


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
ER
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 8 lat
  • Postów:14
0

@bogdans

getStaticInt() nie ma ale jest getgTime() która jest statyczne i zwraca wartość statycznej składowej gTime

bakeraw2
  • Rejestracja:około 14 lat
  • Ostatnio:ponad 5 lat
  • Postów:400
0

Nazwy zmiennych oraz klasy nie za bardzo podobają. Ja bym napisał jeszcze klasę QuestionService z metodą która zwraca pytania które mają być w teście oraz z metodą która oblicza łączny czas dostępny na wszystkie pytania.

ER
Dlaczego nazwy zmiennych nie bardzo Ci się podobają? question, answer_correct, answer_incorrect[3], time, gTime; wydaje mi się, że dobrze opisują swoje przeznaczenie. Może nazwa klasy TestFile nie jest najlepsza ale nie mogłem nic innego wymyślić. Pobieranie pytań z tej klasy jest złe, przecież chyba i tak musiałbym pozostawić te wszystkie metody get i set w tej klasie TestFile.
bakeraw2
Ja bym nazwał klasę Question, pola questionText, correctAnswer, IncorrectAnswers, questionTime a gTime bym wywalił i zwracanie czasu na wszystkie pytania przeniósłbym do innej klasy.
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

@eri, ale Ty wywołujesz metodę getStaticInt(), której nie ma w klasie.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
ER
Na początku dla przykładu napisałem inną nazwę tej metody. Chcę wywołać metodę getgTime()
bogdans
Jaja sobie robisz? Zamieszczasz kod klasy bez jakiejś metody i pytasz czemu nie możesz tej nieistniejącej metody wywołać?
ER
Na początku myślałem, że to jakiś prosty problem i wystarczy ogólny przykład o co mi chodzi bez wdawania się w szczegóły.
bakeraw2
  • Rejestracja:około 14 lat
  • Ostatnio:ponad 5 lat
  • Postów:400
0

Robiłem kiedyś podobną aplikację i u mnie klasa wyglądała w ten sposób:

Kopiuj
public class SpecialistQuestion {
    private int id;
    private int points;
    private String question;
    private String answerA;
    private String answerB;
    private String answerC;
    private ABCAnswer userAnswer;
    private ABCAnswer correctAnswer;
    private String module;
    private String mediaPath;
    private MediaType mediaType;

    public SpecialistQuestion(int id,
                              int points,
                              String question,
                              String answerA,
                              String answerB,
                              String answerC,
                              ABCAnswer userAnswer,
                              ABCAnswer correctAnswer,
                              String module,
                              String mediaPath,
                              MediaType mediaType) {
        this.id = id;
        this.points = points;
        this.question = question;
        this.answerA = answerA;
        this.answerB = answerB;
        this.answerC = answerC;
        this.userAnswer = userAnswer;
        this.correctAnswer = correctAnswer;
        this.module = module;
        this.mediaPath = mediaPath;
        this.mediaType = mediaType;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getPoints() {
        return points;
    }

    public void setPoints(int points) {
        this.points = points;
    }

    public String getQuestion() {
        return question;
    }

    public void setQuestion(String question) {
        this.question = question;
    }

    public String getAnswerA() {
        return answerA;
    }

    public void setAnswerA(String answerA) {
        this.answerA = answerA;
    }

    public String getAnswerB() {
        return answerB;
    }

    public void setAnswerB(String answerB) {
        this.answerB = answerB;
    }

    public String getAnswerC() {
        return answerC;
    }

    public void setAnswerC(String answerC) {
        this.answerC = answerC;
    }

    public ABCAnswer getUserAnswer() {
        return userAnswer;
    }

    public void setUserAnswer(ABCAnswer userAnswer) {
        this.userAnswer = userAnswer;
    }

    public ABCAnswer getCorrectAnswer() {
        return correctAnswer;
    }

    public void setCorrectAnswer(ABCAnswer correctAnswer) {
        this.correctAnswer = correctAnswer;
    }

    public String getModule() {
        return module;
    }

    public void setModule(String module) {
        this.module = module;
    }

    public String getMediaPath() {
        return mediaPath;
    }

    public void setMediaPath(String mediaPath) {
        this.mediaPath = mediaPath;
    }

    public MediaType getMediaType() {
        return mediaType;
    }

    public void setMediaType(MediaType mediaType) {
        this.mediaType = mediaType;
    }

    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder("SpecialistQuestion{");
        sb.append("id=").append(id);
        sb.append(", points=").append(points);
        sb.append(", question='").append(question).append('\'');
        sb.append(", answerA='").append(answerA).append('\'');
        sb.append(", answerB='").append(answerB).append('\'');
        sb.append(", answerC='").append(answerC).append('\'');
        sb.append(", userAnswer=").append(userAnswer);
        sb.append(", correctAnswer=").append(correctAnswer);
        sb.append(", module='").append(module).append('\'');
        sb.append(", mediaPath='").append(mediaPath).append('\'');
        sb.append(", mediaType=").append(mediaType);
        sb.append('}');
        return sb.toString();
    }
}
azalut
  • Rejestracja:około 12 lat
  • Ostatnio:ponad rok
  • Postów:1129
0

@eri gdzieś przez myśl przeszedł mi wzorzec dekoratora: http://www.tutorialspoint.com/design_pattern/decorator_pattern.htm
Gdzie w dekoratorze miałbyś tę metodę i pobierał nią wartości obiektu NewClass (ktory do dekoratora wrzuciłyś interfejsem jako pole Serializable newClass;
Ale to tylko szybka myśl, może starsi koledzy się wypowiedzą :) jak bede miał chwilę to pomyśle jeszcze nad tym, bo na razie troche zajęty jestem

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.