我刚刚在Eclipse Juno中安装(并重新安装)了Findbugs,每当我尝试在任何项目中运行它时,我都会收到以下错误:
An internal error occurred during: "Finding bugs in <project name>...".
java.lang.ArrayIndexOutOfBoundsException
Run Code Online (Sandbox Code Playgroud)
谷歌搜索没有提供任何有用的结果.有任何想法吗?
编辑:我尝试(并且可能失败)在Eclipse中安装Java 8的测试版本来试用Java 8的lambdas和其他功能.也许它与Findbugs无法正常运行有关?
我使用 Java 8的功能还是滥用它?
请参阅下面的代码和说明,了解为什么选择它是这样的.
public interface Drawable {
public void compileProgram();
public Program getProgram();
default public boolean isTessellated() {
return false;
}
default public boolean isInstanced() {
return false;
}
default public int getInstancesCount() {
return 0;
}
public int getDataSize();
public FloatBuffer putData(final FloatBuffer dataBuffer);
public int getDataMode();
public boolean isShadowReceiver();
public boolean isShadowCaster(); //TODO use for AABB calculations
default public void drawDepthPass(final int offset, final Program depthNormalProgram, final Program depthTessellationProgram) {
Program depthProgram = (isTessellated()) …Run Code Online (Sandbox Code Playgroud) 假设我们有2节课.一个空类Base,以及该类的子类Derived.
public class Base {}
public class Derived extends Base {}
Run Code Online (Sandbox Code Playgroud)
然后我们在另一个类中有几个方法:
import java.util.Collection
public class Consumer {
public void test() {
set(new Derived(), new Consumer().get());
}
public <T extends Base> T get() {
return (T) new Derived();
}
public void set(Base i, Derived b) {
System.out.println("base");
}
public void set(Derived d, Collection<? extends Consumer> o) {
System.out.println("object");
}
}
Run Code Online (Sandbox Code Playgroud)
这在Java 7中成功编译并运行,但不能在Java 8中编译.错误:
Error:(8, 9) java: reference to set is ambiguous
both method set(Base,Derived) in Consumer …Run Code Online (Sandbox Code Playgroud) 我的一位同事向我提出了一个有趣的问题,我无法找到一个整洁而漂亮的Java 8解决方案.问题是流过POJO列表,然后根据多个属性在地图中收集它们 - 映射导致POJO多次出现
想象一下以下POJO:
private static class Customer {
public String first;
public String last;
public Customer(String first, String last) {
this.first = first;
this.last = last;
}
public String toString() {
return "Customer(" + first + " " + last + ")";
}
}
Run Code Online (Sandbox Code Playgroud)
将其设置为List<Customer>:
// The list of customers
List<Customer> customers = Arrays.asList(
new Customer("Johnny", "Puma"),
new Customer("Super", "Mac"));
Run Code Online (Sandbox Code Playgroud)
备选方案1:使用Map"流"外部(或更确切地说是外部forEach).
// Alt 1: not pretty since the resulting map is …Run Code Online (Sandbox Code Playgroud) 我已经阅读了OptionalJava 8中的目的(遗憾的是我不记得在哪里),我很惊讶作者没有提到在类中使用an Optional作为属性.
由于我在课堂上经常使用选项,我想知道这是不是很好.或者我可以更好地使用普通属性,null它们在未设置时返回?
注意:看起来我的问题可能是基于意见的,但我觉得Optional在课堂上使用的感觉真的不是要走的路(看完上面提到的帖子后).但是,我喜欢使用它,并且找不到使用它的任何缺点.
例
我想举一个例子来澄清.我有一个类Transaction,它是这样构建的:
public class Transaction {
private Optional<Customer> = Optional.empty();
....
Run Code Online (Sandbox Code Playgroud)
VS
public class Transaction {
private Customer = null;
....
Run Code Online (Sandbox Code Playgroud)
当在一个检查Customer,我认为这是最合理的使用transaction.getCustomer().isPresent()比transaction.getCustomer() != null.在我看来,第一个代码比第二个代码更清晰.
我想实现一个Stream<T>.
我不想只使用implements Stream<T>,因为我必须实施大量的方法.
这可以避免吗?
更具体的,我怎么能流t1,t2以及t3例如:
class Foo<T> {
T t1, t2, t3;
Foo(T t1, T t2, T t3) {
this.t1 = t1;
this.t2 = t2;
this.t3 = t3;
}
}
Run Code Online (Sandbox Code Playgroud) 我正在研究JavaFX应用程序.我的所有gui都是.fxml格式化的,通过控制器类来管理所有GUI组件.但是,在加载FXML加载器之前,我在实例化控制器类时遇到了困难.我无法从stackoverflow上的其他人那里找到一个很好的解决方案,因此这不是一个重复的问题.
我实例化控制器类的原因是我想传递一些参数,以便这些参数将显示在GUI中.
我按以下方式加载FXML文件:
/*
* for Work Order button
*/
@FXML
private void pressWorkOrder() throws Exception{
WorkOrderController wo = new WorkOrderController("ashdkjhsahd"); //instantiating constructor
Parent parent = FXMLLoader.load(getClass().getResource("/fxml/WorkOrder.fxml"));
Scene scene = new Scene(parent);
Stage stage = new Stage();
stage.setScene(scene);
stage.setTitle("Word Order");
stage.setResizable(false);
stage.show();
}
Run Code Online (Sandbox Code Playgroud)
这是我的实际Controller类:
public class WorkOrderController implements Initializable{
@FXML
private Button summary;
private String m,n;
public WorkOrderController(String str) {
// TODO Auto-generated constructor stub
m = str;
}
//for testing
public void set(String …Run Code Online (Sandbox Code Playgroud) 有没有人理解为什么以下代码在Java 7及更低版本中可以正常编译,但是在Java 8中失败了.
public static void main(String[] args) throws Exception {
put(get("hello"));
}
public static <R> R get(String d) {
return (R)d;
}
public static void put(Object o) {
System.err.println("Object " + o);
}
public static void put(CharSequence c) {
System.err.println("CharSequence " + c);
}
public static void put(char[] c) {
System.err.println("char[] " + c);
}
Run Code Online (Sandbox Code Playgroud)
get方法具有泛型返回类型.在JDK 7及更低版本中,这将编译精细,并选择带有Object参数的put方法.在JDK 8中,这无法编译,表明put方法不明确.
显然JDK 8正在跳过Object-parameter方法并找到最后两个子Object-parameter方法并抱怨它们(即如果你添加另一个put方法和其他一些参数类型,编译器将切换并抱怨新的last两种方法)
这似乎是一个错误.
我有一群学生.首先,我想用标记对它们进行分组.然后我想进一步将这些集合分组到同名学生中.
Map<Integer,Map<String,List<String>>> groupping = students.stream()
.collect(Collectors.groupingBy(Student::getMarks,
Collectors.mapping(Student::getName,Collectors.toList())));
Run Code Online (Sandbox Code Playgroud)
我收到一个错误说,
非静态方法不能从静态上下文中引用.
是.我非常清楚,如果没有实例,我就无法引用非静态方法.但是对于所有这些流操作,我真的很困惑.
而不是如何解决这个问题; 我真的想知道这里发生了什么.您的任何投入都表示赞赏!
因为如果我写下面的分组是完全有效的;
Map<Integer,List<Student>> m = students.stream().
collect(Collectors.groupingBy(Student::getMarks));
Run Code Online (Sandbox Code Playgroud)
这是我的Student.java类(如果你需要的话)
public class Student {
private String name;
private int marks;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMarks() {
return marks;
}
public void setMarks(int marks) {
this.marks = marks;
}
public Student(String name, int marks) {
this.name = name;
this.marks = marks;
}
@Override
public String toString() { …Run Code Online (Sandbox Code Playgroud) 为什么不stream.count()退货int?
我明白,我可以很容易地转换long成int铸造,
return (int) players.stream().filter(Player::isActive).count();
Run Code Online (Sandbox Code Playgroud)
但是为什么 java会stream.count()返回long而不是int?
java-8 ×10
java ×8
java-stream ×3
generics ×2
collect ×1
collectors ×1
findbugs ×1
inheritance ×1
javafx ×1
lambda ×1
oop ×1
optional ×1