(JAVA)这段代码为什么可以强制转换为String类型?

发布于 2022-01-04 07:39:05 字数 1596 浏览 427 评论 7

@tcxu 你好,想跟你请教个问题:

代码如下:

package qi;

/**
 *@ClassName : SystemInfo
 *
 *@Description:打印当前虚拟机的所有环境属性的变量和值
 *
 *@date :2014年4月4日下午6:26:03
 */
import java.util.Enumeration;
import java.util.Properties;

public class SystemInfo {
    public static void main(String[] args) {
        Properties sp = System.getProperties();// 获得当前虚拟机的环境属性
        Enumeration e = sp.propertyNames();// 获得环境属性中所有的变量
        // 循环打印出当前虚拟机的所有环境属性的变量和值
        while (e.hasMoreElements()) {
            String key = (String) e.nextElement();
            // Properties的getProperty(String key):用指定的键在此属性列表中搜索属性,返回值是String类型的
            System.out.println(key + " = " + sp.getProperty(key));
        }
    }
}
划红线处为什么可以强制转换为String类型?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

冬天旳寂寞 2022-01-08 05:12:10

中国和山东,一个范围广,一个范围具体一点,

同样String相当于山东更加具体准确,而你取出来的结果是个范围广的信息,虽然也对,但是我们能用更具体的就用更具体的,也就是转换String

无声静候 2022-01-08 05:12:08
找了一下,发现这个包内有用到类似的功能 具体代码如下
package com.sun.org.apache.xalan.internal.xsltc.trax
private Properties createOutputProperties(Properties outputProperties) {
    final Properties defaults = new Properties();
    setDefaults(defaults, "xml");

    // Copy propeties set in stylesheet to base
    final Properties base = new Properties(defaults);
    if (outputProperties != null) {
        final Enumeration names = outputProperties.propertyNames();
        while (names.hasMoreElements()) {
            final String name = (String) names.nextElement();
            base.setProperty(name, outputProperties.getProperty(name));
        }
    }
    else {
        base.setProperty(OutputKeys.ENCODING, _translet._encoding);
        if (_translet._method != null)
            base.setProperty(OutputKeys.METHOD, _translet._method);
    }

    // Update defaults based on output method
    final String method = base.getProperty(OutputKeys.METHOD);
    if (method != null) {
        if (method.equals("html")) {
            setDefaults(defaults,"html");
        }
        else if (method.equals("text")) {
            setDefaults(defaults,"text");
        }
    }

    return base;
}
然后继续往下追踪,我们可以看到Enumeration<E> 这个类里面的  E nextElement();返回泛型是一个Object 固然可以转成String
public interface Enumeration<E> {
    /**
     * Tests if this enumeration contains more elements.
     *
     * @return  <code>true</code> if and only if this enumeration object
     *           contains at least one more element to provide;
     *          <code>false</code> otherwise.
     */
    boolean hasMoreElements();

    /**
     * Returns the next element of this enumeration if this enumeration
     * object has at least one more element to provide.
     *
     * @return     the next element of this enumeration.
     * @exception  NoSuchElementException  if no more elements exist.
     */
    E nextElement();
}
等你爱我 2022-01-08 05:12:01

感觉都没说到重点。能转是因为 这个定义Enumeration e,相当于 Enumeration<Object> e,这样e.next()是Object类型的,当然能转String

吃颗糖壮壮胆 2022-01-08 05:10:03

因为知道内容是String

空城仅有旧梦在 2022-01-08 00:25:42

你这百度的可牛了

时光清浅 2022-01-07 19:58:10

    已知:Java System 类 的 成员方法 static Properties getProperties() 用来确定当前的系统属性。故从代码知:实体 sp, 是当前虚拟机 JVM (环境)属性。

    属性是用字符串 String 类表示。比如,属性类 class Properties 的成员方法  String getProperty(String key) 就是用指定的字符串键在此属性列表中搜索属性(的值)。
    属性的成员方法  Enumeration<?> propertyNames() 的功能是:返回属性列表中所有键的枚举,如果在主属性列表中未找到同名的键,则包括默认属性列表中不同的键。所以 执行代码:"Enumeration e = sp.propertyNames();" 就创建了一个枚举类的实体 e, 它保存了 属性列表中的所有的键。而每一个键,是用给定的一个字符串来表示的。

    枚举类的方法  E nextElement() 的功能是:"如果此枚举对象至少还有一个可提供的元素,则返回此枚举的下一个元素"。 每次通过引用 e 调用方法  nextElement(), 即 "e.nextElement()", 将返回一个枚举类实体的元素,即属性列表中的一个键,一个用字符串表示的键。当然,可以用"强制转换的方式" 显示,这个键的名字是以字符串形式显示出来的。    

顺便解释下一行的部分代码代码:  sp.getProperty(key)。这是按照一个给定的键,返回(查询)对应属性的值。

风柔一江水 2022-01-07 07:35:52

因为key本来就是String,只是为了其他目的包装成其他类了吧,这种代码你可以不问为什么,一般是实现的人提供使用示例。实现的人这么设计代码了,你去问为什么是这样用还不如为什么这么设计。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文