Java, как читать переменную, которая передается в args [0] из других методов открытого класса - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь прочитать аргументы, переданные в jar-файл, но я сомневаюсь - если есть какой-то способ, которым мы можем прочитать конструктор переменных родительского класса непосредственно из подкласса, например,

KafkaSparkStreaming - мой родительский класси мое hbaseconnection является моим подклассом, теперь я сомневаюсь, как получить имя хоста из родительского класса, передаваемого в качестве аргументов моему дочернему классу Hbaseconnection. Также я не хочу устанавливать это как параметр, возможно, полное понимание передачи по ссылке и значение может быть неправильным.

РОДИТЕЛЬСКИЙ КЛАСС

public class KafkaSparkStreaming {

  public String hostDetails;
  public String zipCodePath;

  public KafkaSparkStreaming(String[] args){
    this.hostDetails = args[0];
    this.zipCodePath = args[1];
  }

  public static void main(String[] args) throws Exception {

    if(args.length<2) {
        System.out.println("Arguments must be supplied ");
        System.out.println("Usage: args[0] --> hostName args[1] --> path of zipcodecsv file");
        System.exit(1);
    }
    KafkaSparkStreaming cdhHost = new KafkaSparkStreaming(args);
  }
}

ДЕТСКИЙ КЛАСС

 public class HbaseConnection extends KafkaSparkStreaming implements 
 Serializable  {
    public static String host;
    public HbaseConnection(String[] args) {
    super(args);
}

    private static final long serialVersionUID = 1L;
    static Admin hbaseAdmin = null;
    public static Admin getHbaseAdmin() throws IOException {
    org.apache.hadoop.conf.Configuration conf = 
(org.apache.hadoop.conf.Configuration) HBaseConfiguration.create();
    conf.setInt("timeout", 12000000);
    conf.set("hbase.master","cloudera-instance:60000");            
    conf.set("hbase.zookeeper.quorum", "cloudera-instance");
    conf.set("hbase.zookeeper.property.clientPort", "2181");
    conf.set("zookeeper.znode.parent", "/hbase");
    Connection con = ConnectionFactory.createConnection(conf);

    try {

    if (hbaseAdmin == null)
    //hbaseAdmin = new HBaseAdmin(conf);
    hbaseAdmin = con.getAdmin();
    } catch (Exception e) {
    e.printStackTrace();
    }
return hbaseAdmin;

 }

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Поскольку HbaseConnection является подклассом KafkaSparkStreaming, вы можете просто получить к нему доступ, используя его имя, как показано ниже -

public class HbaseConnection extends KafkaSparkStreaming {

    // rest of your code

    public void getDetails() {
        // do something here    
        System.out.println("Host details from sub-class" + hostDetails);
    }

}
0 голосов
/ 28 декабря 2018

Поскольку hostDetails является свойством public в KafkaSparkStreaming, а HbaseConnection расширяет KafkaSparkStreaming объекты типа HbaseConnection имеют доступ к этому свойству из родительского класса.Вы можете использовать его непосредственно в HbaseConnection.

...