我在Scala对象中定义了以下列表:
object Foo {
val bar = List(1, 2, 3)
}
Run Code Online (Sandbox Code Playgroud)
scala.collection.immutable.List<Object>当我尝试从Java使用它时,这似乎已成为一种情况。结果,我必须使用类似getter Foo.bar().apply$mcII$sp(i)或apply将其强制转换为Integer/ int。
为什么是泛型Object而不是Integer?对于以Java原语存在的类型,似乎也只有这种情况。List[MyType]进入List<MyType>Scala。
我知道Java不允许在泛型中使用原始数据类型,即
List<int> l = new List<int>();
Run Code Online (Sandbox Code Playgroud)
不被允许.
我已阅读一篇相关文章,其中指出这是为了向后兼容.任何人都可以解释如何不允许在泛型中使用原语保持向后兼容性?我非常感谢一个例子的小解释.
一个子问题:在java中如何实现泛型的主要/次要缺点是什么.
非常感谢您的回复.
List<Object> myList = new ArrayList<String>(); //(hint: no)
Map<Integer> myMap = new HashMap<int>(); // (hint: also no)
Run Code Online (Sandbox Code Playgroud)
为什么上述声明中的陈述有误?
在以下程序中:
import java.util.*;
public class HashTableStringdouble
{
// private Hashtable<String, double[]> model = new Hashtable<String, double[]>();;
private Hashtable<String, double> model = new Hashtable<String, double>();; // this does not work
public static void main(String args[])
{
}
}
Run Code Online (Sandbox Code Playgroud)
有双[]但不是双倍.它给出以下错误:
HashTableStringdouble.java:7:错误:意外类型private Hashtable model = new Hashtable();; //这不起作用^ required:reference found:double HashTableStringdouble.java:7:error:unexpected type private Hashtable model = new Hashtable();; //这不起作用^必需:引用找到:double 2错误
我不确定我在这里做错了什么.请解释一下Hashtable的工作原理.
任何人都可以解释为什么下面的代码不能编译但第二个代码呢?
不要编译
private void doNotCompile() {
List<Integer> out;
out = IntStream
.range(1, 10)
.filter(e -> e % 2 == 0)
.map(e -> Integer.valueOf(2 * e))
.collect(Collectors.toList());
System.out.println(out);
}
Run Code Online (Sandbox Code Playgroud)
收集行上的编译错误
编译
private void compiles() {
List<Integer> in;
in = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
List<Integer> out;
out = in.stream()
.filter(e -> e % 2 == 0)
.map(e -> 2 * e)
.collect(Collectors.toList());
System.out.println(out);
}
Run Code Online (Sandbox Code Playgroud) 我大约 2 周前才开始编程,所以请不要太严格:)
我试图解决一个编程练习来打印数组的 3 个最大元素,但是 .sort 方法
报告错误,我不知道为什么。似乎我以错误的方式声明了我的数组,但我无法发现错误。
public static void main(String[] args) {
int [] elements = {1, 4, 17, 7, 25, 3, 100};
int k = 3;
System.out.println("Original Array: ");
System.out.println(Arrays.toString(elements));
System.out.println(k +" largest elements of the said array are:");
Arrays.sort(elements, Collections.reverseOrder());
for (int i = 0; i < k; i++)
System.out.print(elements[i] + " ");
}
Run Code Online (Sandbox Code Playgroud)
}
我在使用两个变量时遇到了一些麻烦:int和Integer.它们大致相同,但(如下面的代码所示)它们并不总是相同.这是我的问题:这段代码非常完美.我已经取得了一个通用的方法,其中printArray需要任何类型的变量的阵列(因为它是通用的)才能工作.这里我使用变量类型Integer.但是,当我改变我的类型数组"getal"的为int(而不是整数),该方法printArray不起作用annymore.这是为什么?泛型方法不适用于int类型变量吗?
package Oefenen;
public class printArray
{
public static void main (String args[])
{
Integer[] getal = {10, 20, 30, 40, 50};
printArray(getal);
}
public static <E> void printArray (E[] intArray)
{
for (E element : intArray)
{
System.out.printf("%s\n", element);
}
}
}
Run Code Online (Sandbox Code Playgroud)
ps:如果我将泛型方法更改为仅用于int的方法,它确实有效.所以我认为问题是:通用方法不适用于int.我
Arrays和Collections是所有java程序员使用的两个基本api类.这两个类都是在Java 1.2中添加的
查看Arrays类,有27个重载的binarysearch方法,它没有使用Generics,因为集合被更新为使用泛型.Collections类有2个重载二进制搜索方法.
为什么这样做或者我错过了什么?
List<int> list; //compile-time error
List<int[]> list1; //works fine
Run Code Online (Sandbox Code Playgroud)
这种行为有什么理由吗?我知道原语需要加框,但为什么不是原始数组呢?
这个代码抛出
线程"main"中的异常java.lang.ArrayIndexOutOfBoundsException:1
在最后一行.是bug还是什么?(JDK 7)
int ar[] = {1,2,3};
List arList = Arrays.asList(ar);
arList.set(1,8);
Run Code Online (Sandbox Code Playgroud) 我试图转换和数组int到List然而每次我尝试我得到编译错误.
List<Integer> integers = toList(draw.getToto6From49().getFirstRound());
// getFirstRound() returns int[] ;
Run Code Online (Sandbox Code Playgroud)
这是我的toList方法
public class ArraysUtil {
public static <T> List<T> toList(T[] ts) {
List<T> ts1 = new ArrayList<>();
Collections.addAll(ts1, ts);
return ts1;
}
}
Run Code Online (Sandbox Code Playgroud)
java:com.totoplay.util.ArraysUtil类中的方法toList不能应用于给定的类型;
required: T[]
found: int[]
reason: inferred type does not conform to declared bound(s)
inferred: int
bound(s): java.lang.Object
Run Code Online (Sandbox Code Playgroud) 到目前为止,我尝试了以下代码,但它不起作用.
HashMap<long, HashSet<long>> hm = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)
我知道原因很长,不参考,我们需要参考类型.任何评论都非常感谢.