Java 转换 : can you force a cast to a interface if it's not declared in the to be casted class?

标签 java casting

我想这是不可能的,但我想知道:

您能否将符合特定接口(interface)方法的类(但不使用“实现接口(interface)”)转换为该接口(interface)?

有什么解决方法吗?我想为某个类使用包装类,但无法访问它的构造函数,也无法修改需要该类的接收代码。

-编辑- 对不起,我不清楚界面。实际上是那些将两条思路融合到一个问题中的问题。我应该询问有关将一个类(class)转换为另一个类(class)的问题。

最佳答案

简短的回答是否定的。系统怎么可能知道?这充其量只是巧合。

现在就解决方​​法而言,反射是您的 friend 。 Oracle tutorial

示例代码:

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Member;
import static java.lang.System.out;

enum ClassMember { CONSTRUCTOR, FIELD, METHOD, CLASS, ALL }

public class ClassSpy {
    public static void main(String... args) {
    try {
        Class<?> c = Class.forName(args[0]);
        out.format("Class:%n  %s%n%n", c.getCanonicalName());

        Package p = c.getPackage();
        out.format("Package:%n  %s%n%n",
               (p != null ? p.getName() : "-- No Package --"));

        for (int i = 1; i < args.length; i++) {
        switch (ClassMember.valueOf(args[i])) {
        case CONSTRUCTOR:
            printMembers(c.getConstructors(), "Constructor");
            break;
        case FIELD:
            printMembers(c.getFields(), "Fields");
            break;
        case METHOD:
            printMembers(c.getMethods(), "Methods");
            break;
        case CLASS:
            printClasses(c);
            break;
        case ALL:
            printMembers(c.getConstructors(), "Constuctors");
            printMembers(c.getFields(), "Fields");
            printMembers(c.getMethods(), "Methods");
            printClasses(c);
            break;
        default:
            assert false;
        }
        }

        // production code should handle these exceptions more gracefully
    } catch (ClassNotFoundException x) {
        x.printStackTrace();
    }
    }

关于Java 转换 : can you force a cast to a interface if it's not declared in the to be casted class?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14267621/

相关文章:

java - 不兼容的类型 : String cannot be converted to Date

java - 如何将类型安全对象强制转换为 JComboBox<String>?

c# - 使用辅助转换函数时的约定

java - Android 上的数组到字符串

java - 需要建议 : Processing color image from camera; Android; OpenCV; NDK; C++

objective-c - 为什么在 C 中将大 double 转换为 long 有时会返回正值而有时会返回负值?

java - 如何让ignite的cast函数返回null而不是抛出异常?

c++ - 在计算过程中将 int 类型转换为 long long 有什么好处?

java - 如何使用 Channels 和 Scala 并行下载文件?

java - GSON 不会反序列化对外部类的引用