重命名openconnection()还是将其切断?

是否可以重命名openconnection()?

原单:

URL url = new URL("http://google.co.in"); URLConnection connection = url.**openConnection**(); 

后:

 URL url = new URL("http://google.co.in"); URLConnection connection = url.**connect**(); 

我只是想知道它是否可能以及我将如何去做。 还有其他选择吗? 为了做到这一点,我正在考虑上课,但我不能100%确定是否可行。

原单:

 URL url = new URL("http://google.co.in"); URLConnection connection = url.**openConnection**(); 

后:

 string st1 = "open"; string st2 = "Connection"; URL url = new URL("http://google.co.in"); URLConnection connection = url.**st1 + st2**(); 

当我把它变成一个字符串时,我得到一个错误,但我不确定如何将它结合起来来定义它。 如果那样的话,那我在使用Java编码方面有点生气。

用一大袋盐来回答这个问题。可以工作,但除非你对Java非常熟悉,否则你通常不希望反思。


你可以用reflection完成#2,忽略你必须处理的各种令人讨厌的exception:

 String st1 = "open"; String st2 = "Connection"; URL url = new URL("http://google.co.in"); Object obj = url.getClass().getMethod(st1 + st2).invoke(url); URLConnection connection = (URLConnection) obj; 

看到:

  • Object#getClass()
  • Class#getMethod(String, Class...)
  • Method#invoke(Object, Object...)

从一行代码中您可能需要以某种方式处理的潜在exception:

  • NoSuchMethodException
  • SecurityException
  • IllegalAccessException
  • IllegalArgumentException
  • InvocationTargetException

不过,我不确定你为什么要这样做。 几乎可以肯定有更好的方法来实现相同的最终结果。 你想要解决的更大问题是什么?

对于第一部分,您不能直接这样做。 您不能从URL派生,因为它是最终的,因此您必须编写代理类,这将浪费时间并可能引入错误。

对于第二个,您可以使用reflection来做到这一点。 这不是一件轻而易举的事,这是一个高级话题。 所以我会避免这种情况,直到你对Java语言非常熟悉。

如果你解释了你想要实现的目标,也许你会得到更好的建议。