小编pol*_*nts的帖子

如何获取间接实现的通用接口的实际类型参数?

我有一个参数化的界面,以多种不同的方式实现.在运行时,我需要弄清楚,给定一个实现该接口的任意对象,接口的实际类型参数是什么.

这是一个解释问题的片段,以及解决问题的中途尝试(也在ideone.com上):

import java.util.*;
import java.lang.reflect.*;

interface Awesome<X> { }
class Base<E> implements Awesome<Set<E>> { }
class Child extends Base<List<Integer>> { }

class AwesomeExample {      
    public static void main(String[] args) {
        Awesome<Set<List<Integer>>> x = new Child();

        System.out.println(
            ((ParameterizedType)
                Child.class.getGenericSuperclass()
            ).getActualTypeArguments()[0]
        );
        // prints "java.util.List<java.lang.Integer>"

        System.out.println(
            ((ParameterizedType)
                Base.class.getGenericInterfaces()[0]
            ).getActualTypeArguments()[0]
        );
        // prints "java.util.Set<E>"        

        investigate(x);
        // we want this to print "Set<List<Integer>>"
    }

    static void investigate(Awesome<?> somethingAwesome) {
        // how to do this?
    }
}
Run Code Online (Sandbox Code Playgroud)

看起来在运行时有足够的泛型类型信息来推断:

  • Child extends Base<List<Integer>>
  • Base<E> …

java generics reflection interface

7
推荐指数
1
解决办法
3722
查看次数

java中的点长度 - 找到它的定义

在哪个类中是length用Java定义的字段(例如,对于数组长度)?我能在Object课堂上看到它的定义吗?

编辑:为什么这个领域如此设计(任何与安全性或内存效率相关的事情)?

java arrays

6
推荐指数
2
解决办法
7029
查看次数

根据以下规则,表达式中的操作数是否被提升为更大的类型?

如果数值表达式包含不同数字类型的操作数(常量和变量),则根据以下规则将操作数提升为更大的类型:

  1. 如果操作数的类型byte,sbyte,char,short,ushort,他们得到转换成int键入
  2. 如果其中一个操作数是int,那么所有操作数都将转换为int
  3. 如果表达还包含的类型的操作数uintint,那么所有的操作数转换为long
  4. 如果其中一个操作数是long,那么所有操作数都将转换为long
  5. 如果表达式包含类型的操作数ulonglong,然后操作数转换为float
  6. 如果其中一个操作数是float,那么所有操作数都将转换为float
  7. 如果其中一个操作数是double,则所有操作数都转换为double

假设数值表达式包含不同类型的操作数,所有操作数首先会转换为单个数字类型,然后运行时才会尝试计算结果吗?例如,如果变量b1b2是的byte类型,而i1int类型,将b1和b2 get转换为int计算之前(b1+b2):

int i2=(b1+b2)+i1
Run Code Online (Sandbox Code Playgroud)

c# operators implicit-conversion

6
推荐指数
1
解决办法
333
查看次数

按位摆弄算法

如果我有一个32位二进制数,并且我想用我所拥有的16位数替换二进制数的低16位,并保持该数字的高16位以产生新的二进制数.我怎么能用简单的按位运算符呢?

例如,32位二进制数是:

1010 0000 1011 1111 0100 1000 1010 1001
Run Code Online (Sandbox Code Playgroud)

而我的低16位是:

                    0000 0000 0000 0001
Run Code Online (Sandbox Code Playgroud)

结果是:

1010 0000 1011 1111 0000 0000 0000 0001
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

algorithm bit-manipulation bitwise-operators

5
推荐指数
1
解决办法
565
查看次数

java中的静态方法

我听说静态方法应该只在java中使用静态变量.但是,主要方法也是静态的,对吗?

java static

5
推荐指数
2
解决办法
2万
查看次数

如何向Java添加(次要)语法糖?

假设我想向Java添加一些小的语法糖.只是添加正则表达式模式文字,或者可能是base-2文字或多行字符串等等.没有什么主要的语法(至少现在).

怎么会这样做呢?

我是否需要扩展字节码编译器?(那可能吗?)

我可以编写Eclipse插件来进行简单的源代码转换,然后再将其提供给标准的Java编译器吗?

java eclipse language-features syntactic-sugar

5
推荐指数
2
解决办法
562
查看次数

是否有正则表达式的风格,允许我计算*和+运算符匹配的重复次数?

是否有正则表达式的风格,允许我计算*+运算符匹配的重复次数?我特别想知道它是否可以在.NET平台下运行.

.net regex repeat matching capturing-group

5
推荐指数
1
解决办法
1222
查看次数

如何打印垂直对齐的文本

我想在文件中打印以下格式的输出..

1 Introduction                                              1
 1.1 Scope                                                  1
 1.2 Relevance                                              1
   1.2.1 Advantages                                         1
     1.2.1.1 Economic                                       2
   1.2.2 Disadvantages                                      2
2 Analysis                                                  2
Run Code Online (Sandbox Code Playgroud)

我不能让页码在一行中垂直对齐.这该怎么做??

java string formatting alignment

5
推荐指数
2
解决办法
2万
查看次数

C中的合并算法:这是如何工作的?

此C片段是合并算法实现的一部分:

out[i++] = (in1[i1] < in2[i2]) ? in1[i1++] : in2[i2++];
Run Code Online (Sandbox Code Playgroud)

有人可以解释它是如何工作的吗?

c algorithm merge

5
推荐指数
2
解决办法
1390
查看次数

您如何测试通用API的类型安全性?

您可以使用例如JUnit来测试库的功能,但是如何测试其在泛型和通配符方面的类型安全性?

只针对编译的代码进行测试是一种"快乐路径"测试; 您是否也应该针对非类型安全的用法测试您的API并确认这些代码不编译?

   // how do you write and verify these kinds of "tests"?

    List<Number> numbers = new ArrayList<Number>();
    List<Object> objects = new ArrayList<Object>();

    objects.addAll(numbers); // expect: this compiles

    numbers.addAll(objects); // expect: this does not compile
Run Code Online (Sandbox Code Playgroud)

那么如何验证您的通用API在编译时引发了正确的错误?您是否只是构建一个非编译代码来测试您的库,并将编译错误视为测试成功,反之亦然?(当然你必须确认错误是与泛型相关的).

是否有促进此类测试的框架?

java generics testing api type-safety

5
推荐指数
2
解决办法
409
查看次数