2015-10-06 3 views
4

У меня есть (педантичный) вопрос Java: я хочу создать анонимный класс в методе и назначить параметр метода члену с тем же именем. Код ниже не работает, поскольку он присваивает член самому себе.Параметр доступа от анонимного класса

class TestClass { 
    String id; 
} 

TestClass createTestClass(final String id) { 
    return new TestClass() {{ 
     this.id = id; // self assignment of member 
    }}; 
} 

Помимо очевидного метода переименования параметра id, есть ли другой способ доступа к нему? Thx

+0

вы хотите анонимный класс только для присвоения 'id' поля? – wero

+0

@wero Я думаю, что это просто упрощенный пример общей концепции: D –

+0

Я не совсем понимаю, зачем вам здесь нужен анонимный класс? – TheLostMind

ответ

1

Вы можете избежать анонимный класс

TestClass createTestClass(final String id) { 
    TestClass testClass = new TestClass(); 
    testClass.id = id; 
    return testClass; 
} 

или переименовать параметр

TestClass createTestClass(final String theId) { 
    return new TestClass() {{ 
     this.id = theId; 
    }}; 
} 

или уронить фабричный метод все вместе, вводя параметр конструктора:

class TestClass { 
    public TestClass(String id) { this.id = id; } 
    String id; 
} 
0

оффтоп , Java 8 Фрагмент для достижения этого:

Function<String, TestClass> createTestClass = TestClass::new; 

Использование:

final class TestClass { 
    private final String id; 

    public TestClass(String id) { 
     this.id = id; 
    } 

    public String getId() { 
     return id; 
    } 
}; 

public class AnyClass { 
    static Function<String, TestClass> createTestClass = TestClass::new; 

    public static void main(String[] args) { 
     TestClass testclass = createTestClass.apply("hello"); 
     System.out.println(testclass.getId()); 
    } 
}