2015-03-09 2 views
-1

Я создал класс объекта под названием «Образец» и хотел бы получить доступ к статической переменной, соответствующей входному параметру в методе, который создается объектом.Как вызвать статическую переменную объекта с использованием значения переменной String?

Например:

// ____ FILE 1: Sample.java _______ 
package com.JavaProject; 
import java.util.ArrayList; 

public class Sample { 

    String Sample_ID = ""; 
    ArrayList<String> Assay_ID = new ArrayList<String>(); 
    ArrayList<String> NCBI_ref = new ArrayList<String>(); 
    ArrayList<String> Call = new ArrayList<String>(); 
    ArrayList<String> Well = new ArrayList<String>(); 

} 

// ____ FILE 2: Retreiver.java_______ 

public class Retreiver { 
    public static void indexer (String Field){ 

     Sample sam = new Sample(); 
     sam.Sample_ID = "SAMPLE1"; 
     System.out.println(sam.Sample_ID); // This will print SAMPLE1 to console. 
     System.out.println(sam.{Field}); // I want this to print the value of the field as per the variable's name. 
     } 

    public static void main(String[] args) { 
     String Field = "Sample_ID"; 
     indexer(Field); 
    } 
} 

Идентификатор как Retreiver.Indexer для распечатки статической переменной «Sample_ID», как определено во входном параметре метода «Поле».

I.E. Если я введу String Field = «Assay_ID», то индексщик распечатает образец Assay_ID

Заранее спасибо.

+4

Отражение - ваш друг. –

+1

Вы не можете сделать это без размышлений, но почему вы хотите сделать что-то подобное? –

+3

У вас нет никаких статических переменных в вашем примере. Что заставляет вас думать, что «Sample_ID» является статическим? (Теперь было бы очень хорошее время, чтобы узнать и начинать следовать соглашениям об именах Java, кстати.) –

ответ

0

Вы можете использовать отражение для доступа к полям любого объекта.

public static void indexer (String field) { 
    Sample sam = new Sample(); 
    sam.Sample_ID = "SAMPLE1"; 
    try { 
     Field myField = Sample.class.getDeclaredField(field); 
     myField.setAccessible(true); 
     System.out.println(sam.Sample_ID); // This will print SAMPLE1 to console. 
     System.out.println(myField.get(sam)); // I want this to print the value of the field as per the variable's name. 

    } catch (Exception e) { 
     // Handle exception 
    } 
} 
+2

Отражение должно быть решением последней инстанции для всего, ну, любой проблемы. Мне кажется, что его проблема имеет решение где-то в API-интерфейсах Java Collections Framework, и если это так, это будет примерно в миллиард раз лучше, чем использование Reflection API. – scottb

Смежные вопросы