@Daи Nu am descoperit niciun indiciu ligvistic(și nici nu aș fi calificat să o fac, în limbile originale). Din moment ce nici numeroși comentatori nu au găsit(inclusiv Keil & Delitzsch), cel mai bun răspuns este cel mai direct, că Iosua a scris-o. Textul consemnează că Dumnezeu i-a vorbit lui Moise, iar Dumnezeu i-a vorbit lui Iosua și că slujba lui Moise a căzut asupra lui Iosua, care a fost uns pentru a-i succeda, dându-i autoritatea de a vorbi (și de a scrie) în numele lui Dumnezeu. –  (Programare, Java, Spring, Siguranța Tipurilor, Neverificat)

Tau

a intrebat.
Eram curios, cred că argumentul lui Iosua este destul de bun, dar aș vrea să citesc mult mai mult înainte de a mă convinge. Chiar și așa, acesta are upvote-ul meu. – 

Dan

<util:map id="someMap" map-class="java.util.HashMap" key-type="java.lang.String" value-type="java.lang.String">
    <entry key="some_key" value="some value" />
    <entry key="some_key_2" value="some value" />   
</util:map>

@Daи Am vrut să spun și „contructiv”… ;>) – 

Tau

private Map<String, String> someMap = new HashMap<String, String>();
someMap = (HashMap<String, String>)getApplicationContext().getBean("someMap");

user33515

O ipoteză predominantă astăzi – așa-numita „ipoteză documentară” – este că Tora în ansamblul ei a fost editată și redactată din patru surse primare de la diverși autori, enumerate ca „J”, „E”, „P” și „D”. Introducerea la Tora în Oxford Jewish Study Bible

explică:

Fiecare dintre aceste surse sau documente este încorporat într-o formă (relativ) completă în Tora actuală și este caracterizat prin vocabular, stil literar și perspectivă teologică. J și E sunt numite astfel după numele lui Dumnezeu pe care fiecare dintre ele le folosește în Geneza: J folosește numele „Yahveh” (în germană „Jahwe”, de unde „J”), tradus în NJPS prin „Domnul”, deși este de fapt un nume personal a cărui semnificație exactă este necunoscută; E preferă să numească divinitatea „Elohim” (tradus „Dumnezeu”), un epitet care servește și ca termen generic pentru Dumnezeu sau zei în Biblie. P, care folosește de asemenea „Elohim” (și alte nume, cum ar fi „Shaddai”), este o abreviere pentru materialul preoțesc, iar D se referă la Deuteronom, în principal în Deuteronom.

Comentarii

  • > Por Admițând că datele nu pot fi complet verificate, editorii comentează de asemenea:.
  • Cercetările biblice critice, până în a doua parte a secolului al XX-lea, au fost destul de încrezătoare în datarea fiecăruia dintre aceste surse ale Torei, împreună cu colecțiile juridice pe care le-au încorporat. Astfel, J a fost considerată ca fiind cea mai veche colecție, adesea datată în perioada lui David și Solomon în secolul al X-lea î.Hr., urmată de E, care a fost adesea asociată cu Regatul de Nord. D a fost legat de reformele regelui Iosia de la sfârșitul secolului al VII-lea, iar P a fost considerat ca provenind din comunitatea exilată în Babilonia în secolul al VI-lea î.Hr. > Por .
  • Deși Ipoteza documentară datează din secolul al XIX-lea, paternitatea mozaică a Torei a fost pusă sub semnul întrebării cel puțin din secolul al V-lea, când Ieronim, în editarea traducerii sale latine a Vechiului Testament, a speculat că autorul real ar fi putut fi Ezra (de asemenea, după cum subliniază un alt răspuns, un lucru pe care unii cercetători moderni îl speculează).

  • > Por Alte ipoteze privind paternitatea Torei includ „ipoteza suplimentării”, în care diverși editori ai Torei au adăugat succesiv materiale suplimentare; și „ipoteza fragmentelor”, în care editorii de mai târziu au legat între ele un număr mare de texte întregi (aceasta .articol din Wikipedia
  • oferă mai multe informații).

10 răspunsuri

Cine a scris sfârșitul Deuteronomului?

HashMap

private Map<String, String> someMap = (HashMap<String, String>)getApplicationContext().getBean("someMap");

HashMapHashMap

if(getApplicationContext().getBean("someMap") instanceof HashMap) {
    private Map<String, String> someMap = (HashMap<String, String>)getApplicationContext().getBean("someMap");
}

getBeanObjectHashMapHashMap<String, String>

HashMap<Object, Object>HashMap<String, String>HashMap<Date, Calendar>

String value = map.get("thisString");ClassCastException

Comentarii

  • > Por .

HashMap<String,String>HashMap<Foo,Bar>FooBar

@SuppressWarnings("unchecked")

Comentarii

  • > Por .
  • > Por .
  • > Por .

List<Object>List<String>List<Integer>

List<String> strList = (List<String>) someFunction();
String s = strList.get(0);

List<?> strList = (List<?>) someFunction();
String s = (String) strList.get(0);

Comentarii

  • > Por .
  • > Por .
  • > Por .
  • > Por .

În cazul mulajelor, în acest caz va da întotdeauna un avertisment. Dacă sunteți absolut sigur că un anumit cast va fi sigur, atunci ar trebui să aveți în vedere adăugarea unei adnotări de acest tip (nu sunt sigur de sintaxă) chiar înainte de linie:

@SuppressWarnings (value="unchecked")

Comentarii

    19

  • -1: un avertisment nu ar trebui să fie niciodată acceptat. Sau suprimați acest tip de avertismente sau reparați-o. Va veni un moment în care veți avea prea multe avertismente și nu veți mai vedea o dată relevante. –  > Por ezdazuzena.
  • Nu puteți evita cu adevărat avertismentele de tip class cast atunci când faceți casting de generice parametrizate, de exemplu Map, deci acesta este cel mai bun răspuns la întrebarea inițială. –  > Por muttonUp.
David Nehme

Primiți acest mesaj deoarece getBean returnează o referință de obiect și o transformați în tipul corect. Java 1.5 vă dă un avertisment. Aceasta este natura utilizării Java 1.5 sau a unei versiuni mai bune cu un cod care funcționează astfel. Spring are versiunea typesafe

someMap=getApplicationContext().getBean<HashMap<String, String>>("someMap");

pe lista sa de sarcini.

Rabbit

Dacă doriți cu adevărat să scăpați de avertismente, un lucru pe care îl puteți face este să creați o clasă care se extinde din clasa generică.

De exemplu, dacă încercați să utilizați

private Map<String, String> someMap = new HashMap<String, String>();

Puteți crea o clasă nouă, cum ar fi

public class StringMap extends HashMap<String, String>()
{
    // Override constructors
}

Apoi, atunci când utilizați

someMap = (StringMap) getApplicationContext().getBean("someMap");

Compilatorul ȘTIE care sunt tipurile (care nu mai sunt generice) și nu va exista niciun avertisment. Este posibil ca aceasta să nu fie întotdeauna soluția perfectă, unii ar putea susține că acest lucru înfrânge oarecum scopul claselor generice, dar tot reutilizați același cod din clasa generică, doar că declarați în momentul compilării ce tip doriți să utilizați.

ochakov

Soluția pentru a evita avertismentul neverificat:

class MyMap extends HashMap<String, String> {};
someMap = (MyMap)getApplicationContext().getBean("someMap");

Comentarii

  • Pare a fi un hack, nu o soluție. –  > Por Malwinder Singh.
  • – Clasa serializabilă MyMap nu declară un câmp static final serialVersionUID de tip long :{ – –  > Por Ulterior.
  • @Ulterior apoi adăugați un astfel de câmp: stackoverflow.com/questions/2288937/… – –  > Por Linia.
Andy

Codul de mai jos provoacă avertismentul de siguranță a tipului

Map<String, Object> myInput = (Map<String, Object>) myRequest.get();

Soluție de rezolvare

Creați un nou Map Object fără a menționa parametrii, deoarece tipul obiectului deținut în cadrul listei nu este verificat.

Pasul 1: Creați o nouă Hartă temporară

Map<?, ?> tempMap = (Map<?, ?>) myRequest.get();

Pasul 2: Instanțiați Harta principală

Map<String, Object> myInput=new HashMap<>(myInputObj.size());

Pasul 3: Iterați harta temporară și setați valorile în harta principală

 for(Map.Entry<?, ?> entry :myInputObj.entrySet()){
        myInput.put((String)entry.getKey(),entry.getValue()); 
    }

davidxxx

Ce am făcut greșit? Cum pot rezolva problema?

Aici :

Map<String,String> someMap = (Map<String,String>)getApplicationContext().getBean("someMap");

Folosiți o metodă veche pe care, în general, nu dorim să o folosim, deoarece aceasta returnează Object:

Object getBean(String name) throws BeansException;

Metoda de favorizat pentru a obține (pentru singleton) / crea (pentru prototip) o fasole dintr-o fabrică de fasole este :

<T> T getBean(String name, Class<T> requiredType) throws BeansException;

Utilizarea acesteia, cum ar fi: :

Map<String,String> someMap = app.getBean(Map.class,"someMap");

va compila, dar tot cu un avertisment de conversie necontrolată, deoarece toate Map obiecte nu sunt neapărat Map<String, String> obiecte.

Dar <T> T getBean(String name, Class<T> requiredType) throws BeansException; nu este suficient în cazul claselor generice de fasole, cum ar fi colecțiile generice, deoarece este necesar să se specifice mai multe clase ca parametru: tipul colecției și tipul (tipurile) generic(e) al(e) acesteia.

În acest tip de scenariu și în general, o abordare mai bună este să nu se utilizeze direct BeanFactory ci să se lase cadrul să injecteze bean-ul.

Declarația bean-ului :

@Configuration
public class MyConfiguration{

    @Bean
    public Map<String, String> someMap() {
        Map<String, String> someMap = new HashMap();
        someMap.put("some_key", "some value");
        someMap.put("some_key_2", "some value");
        return someMap;
    }
}

Injectarea beanului :

@Autowired
@Qualifier("someMap")
Map<String, String> someMap;

Jeremy

O altă soluție, în cazul în care vă aflați de multe ori în situația de a folosi același obiect și nu doriți să vă umpleți codul cu @SupressWarnings("unchecked"), ar fi să creați o metodă cu adnotarea. În acest fel, centralizați cast-ul și, sperăm, reduceți posibilitatea de eroare.

@SuppressWarnings("unchecked")
public static List<String> getFooStrings(Map<String, List<String>> ctx) {
    return (List<String>) ctx.get("foos");
}