Tag: 转换

在Java中转换为具体类和调用方法

假设我们有一个名为A的基类和一些子类( B , C , D等)。 大多数子类都有方法do()但基类没有。 AA类提供了一个名为getObject()的方法,它将创建一个B或C或D等的对象,但是将该对象作为类型A返回。 如果此方法可用,如何将返回的对象强制转换为具体类型并调用其do()方法? 编辑: 我不允许更改类A ,子类或AA ,因为我使用一个封闭的源API ..是的,它确实有一些设计问题,你可以看到。

1l为long,1f为float,1d为double,字节怎么样?

1l为long,1f为float,1d为double,字节怎么样? long l = 1l; float f = 1f; double d = 1d; // byte b = 1?; byte的等价物是什么? 它存在吗?

Java:我可以将对象列表转换为String 列表,反之亦然?

这可能不经过列表并投射对象吗? 我还需要将List转换为List (T =预定义对象),如果可能的话? 编辑:为了澄清,我正在尝试使用List作为我的代码中广泛使用的类方法的返回类型。

用Java打印数组

我正在编写一个方法来打印它传递的每个Object。 通过为对象调用Object.toString()方法可以正常工作,但不适用于数组。 我可以通过Object.getClass().isArray()方法找出它是否是一个数组,但我不知道如何转换它。 int[] a; Integer[] b; Object aObject = a; Object bObject = b; // this wouldn’t work System.out.println(Arrays.toString(aObject)); System.out.println(Arrays.toString(bObject));

Java:将(long)Object转换为double的许多方法

我有一个Object obj ,我知道它实际上很long 。 在某些Math代码中,我需要它为double 。 直接将其加倍可以安全吗? double x = (double)obj; 或者我应该先把它再做一次然后再加倍。 double x = (double)(long)obj; 我还发现了另一个(不太可读)替代方案: double x = new Long((long)obj).doubleValue(); 这样做有什么危险/含义? 解决方案总结 obj是一个Number而不是long 。 Java 6需要显式转换,例如: double x = ((Number)obj).doubleValue() Java 7具有工作魔法: double x = (long)obj 有关Java6 / 7问题的更多详细信息,请阅读有关TJ答案的讨论。 编辑:我做了一些快速测试。 两种投射方式(显式/魔术)具有相同的性能。

一般用Java覆盖一个方法

如果我有这样的基类,我无法改变: public abstract class A { public abstract Object get(int i); } 我尝试用这样的B类扩展它: public class B extends A{ @Override public String get(int i){ //impl return “SomeString”; } } 一切都好。 但是如果我尝试的话,我试图让它更通用的失败: public class C extends A{ @Override public T get(int i){ //impl return (T)someObj; } } 我想不出有什么理由不应该被禁止。 根据我的理解,generics类型T绑定到一个Object – 它是A的请求返回类型。 如果我可以将String或AnyObject作为我的返回类型放在B ,为什么我不允许在我的C类中放入 T ? 从我的观点来看,另一种奇怪的行为是这样的另一种方法: public […]

从父类返回子类

我有一个构建器类,它从大多数方法返回以允许菊花链。 为了使这个工作与子类,我希望父方法返回子的实例,以便子方法可用于链到最后。 public class BaseBuilder<T extends BaseBuilder> { public T buildSomething() { doSomeWork(); /* OPTION #1: */ return this; // “Type mismatch: cannot convert from BaseBuilder to T” /* OPTION #2: */ return T.this; // “Type mismatch: cannot convert from BaseBuilder to T” /* OPTION #3: */ return (T) this; // “Type safety: Unchecked cast […]

当对象是Java中的接口引用时类型转换

我熟悉inheritance model type casting 。 让SuperClass and SubClass成为父类和子类; SuperClass superClass = new SubClass() ; – 这里实例化的object是subclass object ; 但它的reference type是SuperClass ; 那只是可以在subclass object上调用SuperClass那些methods ; 不能调用任何未在subclass inherited/overridden methods (即subclass任何唯一methods )。 如果SuperClass is an interface而SubClass implements it我观察到与上面相同的行为。 这只是在SuperClass interface中声明的那些方法可以在SubClass对象上调用。 我的理解是否正确? 但是通过一些casting ,我可以调用不属于接口的方法,我在下面的示例代码中观察到了这些方法; 我对我的理解做了一些评论,说明它是如何运作的; 但我想知道这是否有意义,或者我的解释是否错误; class Animals { public void bark(){ System.out.println(“animal is barking”); } } interface catIF […]

如何在android上将xml转换为html?

我对java和android比较新,在我的android应用程序中我需要获取xml文件,将其转换并显示给用户。 我知道如何解析xml,但我不想解析它并生成视图。 我想将其转换为html并在WebView中显示。 我试图在互联网上找到一些东西,却找不到任何东西(( 我该怎么做? 任何想法或链接将不胜感激, 谢谢

使用具有generics优势的多种值类型映射

我想创建一个地图,它将提供generics的好处,同时支持多种不同类型的值。 我认为以下是通用集合的两个关键优势: 编写时间警告将错误的东西放入集合中 从集合中获取东西时无需进行强制转换 所以我想要的是一张地图: 它支持多个值对象, 检查放入地图的值(最好是在编译时) 知道从地图获取时的对象值。 使用generics的基本案例是: Map map = new HashMap(); // No type checking on put(); map.put(MyKey.A, “A”); map.put(MyKey.B, 10); // Need to cast from get(); Object a = map.get(MyKey.A); String aStr = (String) map.get(MyKey.A); 我找到了一种方法来解决第二个问题,通过创建一个AbstractKey,它由与此键关联的值类通用: public interface AbstractKey { } public enum StringKey implements AbstractKey{ A,B; } public enum IntegerKey […]