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

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)